在SAS中复制字段---使用RETAIN语句?

时间:2011-12-12 22:42:11

标签: sas retain

我正在尝试执行以下操作。

我想要这个:

ID抗生素1抗生素2 1 1 1。 。
1。 2 1。 。 2。 1 2 3。 2。 。 3 1 3。 2

转变为:

ID抗生素1抗生素2 1 1 2
1 1 2
1 1 2 1 1 2 2 3 1 2 3 1 2 3 1 3 1 1
3 2 2

有什么想法吗?

谢谢!!

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找这样的东西。请注意,下面我将默认的抗生素值初始化为55只是为了突出显示,但您可能希望将此值更改为2,如上所示。

data antibiotics;
  input id anti1 anti2;
datalines;
1 1 .
1 . .
1 . 2 
1 . . 
2 . 1 
2 3 . 
2 . . 
3 1 .
3 . 2
;
run;

data antibiotics2;
  set antibiotics;
  retain prev_anti1 prev_anti2 55;

    if anti1 = . then do;
      anti1 = prev_anti1;
    end;
    if anti2 = . then do;
      anti2 = prev_anti2;
    end;

  prev_anti1 = anti1;
  prev_anti2 = anti2;

  drop prev:;
run;

proc print data=antibiotics2;
run;

输出结果为:

Obs    id    anti1    anti2

1      1      1        55
2      1      1        55
3      1      1         2
4      1      1         2
5      2      1         1
6      2      3         1
7      2      3         1
8      3      1         1
9      3      1         2

答案 1 :(得分:0)

看起来您只是根据您在数据集中观察到的因素随机输入缺失值。皱纹可能是考虑您是否希望这些估算取决于它们在数据集中出现的频率。例如,如果您在非缺失数据中有80%1,那么您是否希望在缺失数据中生成概率为0.8的1?

您可能想要阅读PROC SURVEYSELECT,它有助于从观察数据样本中模拟绘图。可能需要首先使用PROC TRANSPOSE将数据集转换为固定宽度的数据框,这样它就是一个长数据集,而不是一个宽数据集。然后,您将只有一列缺少数据。