0

尝试使用 SAS 中的 LAG 函数在迁移到 SAS DI 中复制一段代码,但是 SAS DI 中似乎根本没有相同的函数。目前使用 SAS DI 4.21,以期很快升级到 4.9。

所以我的问题是,是否有另一种方法可以在 SAS DI 中复制以下代码:

DATA work.dm_chg_bal;
SET tmp_bal_chg;
FORMAT dt2 date9.;
acct_id2 = LAG1(acct_id);
app_suf2 = LAG1(app_suf);
dt2 = LAG1(start_dt);
RUN;

干杯,

4

2 回答 2

0

为此,我将使用用户编写的转换。只要您足够勤奋地执行变量映射,这样做确实没有问题 - 因此将数据沿袭保留在元数据中。

此处提供了对此的解释。

于 2017-09-15T13:54:49.193 回答
0

我不太了解 DI Studio 转换(我通常只使用 User Written 转换)。

我想知道是否有一个转换可以欺骗生成:

data work.dm_chg_bal;
  set tmp_bal_chg;
  output;
  set tmp_bal_chg(rename=(acct_id=acct_id2 app_suf=app_suf2 start_dt=dt2));
run;

或者

data work.dm_chg_bal;
  if _n_ > 1 then set tmp_bal_chg(rename=(acct_id=acct_id2 app_suf=app_suf2 start_dt=dt2));
  set tmp_bal_chg;
run;

如果不是,我确信有数据转换可以让您制作数据集的两个副本,一个带有ID=_n_,另一个带有ID=_n_+1,然后按 ID 合并。也就是说,生成:

data main;
  set tmp_bal_chg;
  ID = _n_ ;
run;

data lag;
  set tmp_bal_chg (rename=(acct_id=acct_id2 app_suf=app_suf2 start_dt=dt2));
  ID = _n_ + 1;
run;

data work.dm_chg_bal;
  merge main (in=a)
        lag (keep=id acct_id2 app_suf2 dt2 in=b)
  ; 
  by id;
  if a;
run;
于 2017-09-16T01:50:38.477 回答