2017-09-15 64 views
0

尝试使用SAS中的LAG功能复制迁移到SAS DI中的一段代码,但在SAS DI中似乎并没有相同的功能。 目前使用SAS DI 4.21,目标是尽快提高到4.9。SAS DI LAG1的替代方案?

所以我的问题是,是否有在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; 

干杯,

回答

0

为此,我会用一个用户编写的变换。只要你勤奋地执行变量映射 - 这样就保留了元数据中的数据血统,这样做确实没有问题。

此解释可用here

0

我不太了解DI Studio转换(我通常只使用用户书面转换)。

我不知道是否有一个转变,你可以欺骗发生:

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;