gpt4 book ai didi

sas - 使用 do 循环删除数据步骤中丢失的数据

转载 作者:行者123 更新时间:2023-12-01 22:04:50 27 4
gpt4 key购买 nike

我在 SAS 中读取不完整的数据,并且在跳过 do 循环中的缺失值时遇到问题。

我当前的代码是:

data rcb_missing_LM;
input blk @@;
do trt=1,2,3;
input y @@;
if y=. then delete;
else output;
end;
cards;
1 47.2 . 49.4
2 . 56.6 53.6
;

我想要得到的输出是:

| obs | blk | trt | y    |
|-----|-----|-----|------|
| 1 | 1 | 1 | 47.2 |
| 2 | 1 | 3 | 49.4 |
| 3 | 2 | 2 | 56.6 |
| 4 | 2 | 3 | 53.6 |

相反,我得到以下信息:

| obs | blk  | trt | y    |
|-----|------|-----|------|
| 1 | 1.0 | 1 | 47.2 |
| 2 | 49.4 | 1 | 2.0 |
| 3 | 56.6 | 1 | 53.6 |

我最好的猜测是 DELETE 命令丢弃了 trt 变量。

有人可以指导我解决这个问题吗?

最佳答案

您是正确的,DELETE 语句是问题的原因。 DELETE 语句停止 DATA 步循环的当前迭代,并继续 DATA 步的下一次迭代。您要做的是停止您编写的 DO 循环的当前迭代,并继续执行 DO 循环的下一次迭代。为此,您使用 CONTINUE 语句。所以你可以把它编码为:

data rcb_missing_LM;
input blk @;
do trt=1,2,3;
input y @;
if y=. then continue;
else output;
end;
cards;
1 47.2 . 49.4
2 . 56.6 53.6
;

我还更改了输入语句以单个 @ 而不是 @@ 结尾。双尾随 @ 保存跨 DATA 步迭代的输入记录。在这种情况下它不会造成伤害(除了关于 SAS 在读取输入行末尾时转到下一行的注释),但不需要它。在 DATA 步的第一次迭代中,您读取了第一个输入记录中的所有值。使用单个尾随 @,在 DATA 步的第二次迭代中,指针自动转到第二个输入记录,您可以读取这些值。

关于sas - 使用 do 循环删除数据步骤中丢失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469680/

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