gpt4 book ai didi

sas - 用之前的非空白值填充变量的空白值 SAS 9.3

转载 作者:行者123 更新时间:2023-12-03 18:23:21 27 4
gpt4 key购买 nike

我正在使用一个类似于以下内容的数据集:

+----------+--------+-------+
| 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 |
+----------+--------+-------+

我在 DATA 步骤中尝试了各种可能性,主要是使用 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 行中放置空白。它不必修改这一行,因为我说的是“If variable = .”。
我知道如何在 Python 或 R 中使用一些 for 循环来做到这一点,但我没有在 SAS 中找到好的解决方案。

我试图将字符串放入带有“ CALL SYMPUT ”和“ RETAIN ”的变量中,但它也不起作用。

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

最佳答案

您不能在 IF 中使用 LAG 并获得该结果 - LAG 实际上并不像您想象的那样工作。 RETAIN 是我要说的正确方式:

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

滞后实际上并没有转到前一个记录并获取其值;它的作用是建立一个队列,每次调用 LAG 时,它都会从前面取出一条记录,并在后面添加一条记录。这意味着如果 LAG 位于条件块内,则它不会针对 false 条件执行,并且您不会获得队列。您可以使用 IFN 和 IFC 函数,无论 bool 值如何,它们都会评估 true 和 false 条件,但在这种情况下,RETAIN 可能更容易。

关于sas - 用之前的非空白值填充变量的空白值 SAS 9.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16421386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com