与以前的非空值SAS 9.3填充变量的空白值(Fill the blank values of a

2019-09-02 03:54发布

我使用的数据集是这样的:

+----------+--------+-------+
| Variable | Level  | Value |
+----------+--------+-------+
| sexe     | men    |    10 |
|          | female |    20 |
| age      | 0-20   |     5 |
|          | 20-40  |     5 |
|          | 40-60  |    10 |
|          | >60    |    10 |
+----------+--------+-------+

我想满足使用以前的非空白单元格获得这样的“空白”细胞。

+----------+--------+-------+
| Variable | Level  | Value |
+----------+--------+-------+
| sexe     | men    |    10 |
| sexe     | female |    20 |
| age      | 0-20   |     5 |
| age      | 20-40  |     5 |
| age      | 40-60  |    10 |
| age      | >60    |    10 |
+----------+--------+-------+

我试着在大多与数据步各种可能性LAG()函数。 当时的想法是看了前面排当细胞是空的,并填补。

DATA test;
   SET test;

   IF variable = . THEN DO;
      variable = LAG1(variable);
   END;
RUN;

而我得到的

+----------+--------+-------+
| Variable | Level  | Value |
+----------+--------+-------+
|          | men    |    10 |
| sexe     | female |    20 |
|          | 0-20   |     5 |
| age      | 20-40  |     5 |
|          | 40-60  |    10 |
|          | >60    |    10 |
+----------+--------+-------+

这个问题是很好的字符串不是永远只是一列上。 但我不明白为什么SAS在第一和3D线把空白。 它没有修改这一行,因为我说:“如果变量=。”。 我知道如何做到这一点在Python或与一些用于回路R,但我没有发现SAS很好的解决方案。

我试图把字符串变量里面有“ CALL SYMPUT ”,并与“ RETAIN ”,但它没有工作过。

必须有一个简单而优雅的方式来做到这一点。 任何的想法?

Answer 1:

您无法使用LAG的IF内得到这一结果 - LAG不实际工作,你的思维方式。 RETAIN是正确的方法,我会说:

DATA test;
   SET test;
   retain _variable;
   if not missing(variable) then _variable=variable;
   else variable=_variable;
   drop _variable;
RUN;

滞后实际上并没有去以前的记录,并得到其价值; 它所做的是建立一个队列,每一次LAG被称为它从前面起飞的记录,将记录添加到后面。 这意味着,如果LAG是一个条件块中,它不会执行的假条件,你没有得到你的队列。 您可以使用干扰素和国际金融公司(IFC)功能,无论布尔其评估真假两条件,但在这种情况下RETAIN可能是更容易。



文章来源: Fill the blank values of a variable with the previous non blank value SAS 9.3
标签: sas