SAS保留Statement以拖下值

时间:2018-02-21 22:02:52

标签: sas

以下是我拥有的数据的示例

data testretain;
input SUBJ  visit parameter value    vistype$   basevalue$;
cards; 
        01  1           1       152     screen      .   
        01  1           2       22      screen      .
        01  1           3       1000    screen      .
        01  2           1       154     random      YES
        01  2           2       23      random      YES
        01  2           3       1005    random      YES
        01  3           1       155     visit       .
        01  3           2       21      visit       .
        01  3           3       1003    visit       .
;
run;

我想确保value如果basevalue YES被转移到每次访问

所以它看起来如下 - 这就是我希望输出看起来像

的方式
    SUBJ visit    parameter   value   vistype$  basevalue$ BASE;

        01  1           1       152     screen      .   
        01  1           2       22      screen      .
        01  1           3       1000    screen      .
        01  2           1       154     random      YES    154
        01  2           2       23      random      YES     23
        01  2           3       1005    random      YES   1005
        01  3           1       155     visit       .      154 
        01  3           2       21      visit       .       23 
        01  3           3       1003    visit       .     1005 

我尝试了以下代码;

data testretain1;
set testretain;
if basevalue='YES' then BASE=value;
retain BASE;
run; 

但它似乎无法奏效。 1005值会被拖到每个观察点上。

1 个答案:

答案 0 :(得分:0)

对数据进行排序,使同一参数的所有结果在一起,然后您可以轻松使用RETAIN来解决此问题。

data want;
  set have ; 
  by subject parameter visit;
  if first.parameter then BASE=.;
  if basevalue='YES' then BASE=value;
  retain BASE;
run;