gpt4 book ai didi

sas - 需要更改以前的值

转载 作者:行者123 更新时间:2023-12-02 04:43:25 25 4
gpt4 key购买 nike

假设我们有以下数据集

obs    check   result
---------------------
aa 0 0
bb 0 0
cc 1 0
dd 0 0
ee 1 1
ff 1 1 <- we are here. Due to prev. value both eq 1 the "result" variable for both of them should also be 1

我需要的是检查一行中“check”变量中的2个或更多个案例是否等于1,如果是,则它们的“result”变量也应该为1。问题是唯一的方法我看到将“结果”设置为 1 是为了以某种方式返回到前一个“观察到的行”并将那里的“结果”变量也更改为 1。

最佳答案

由于数据步循环的设计方式,我认为我们无法轻易回到之前的观察结果。但是,我们可以使用 retain 语句和 merge 将数据集与其自身 而无需 by 语句来访问上一个或下一个观察结果:

data work.sample;
input obs $ check result;
retain x;
output;
x = check;
datalines;
aa 0 0
bb 0 0
cc 1 0
dd 0 0
ee 1 0
ff 1 0
;
run;

data work.sample2;
merge work.sample
work.sample(firstobs = 2 keep = check
rename = (check = c));
if (check = 1 and x = 1) or (check = 1 and c = 1) then result = 1;
run;

输出看起来像这样:

                      Obs    obs    check    result    x    c

1 aa 0 0 . 0
2 bb 0 0 0 1
3 cc 1 0 0 0
4 dd 0 0 1 1
5 ee 1 1 0 1
6 ff 1 1 1 .

因此,变量 x 表示使用 retain 语句和 output 语句保留的值。变量 c 表示我们在观察 = 2 时开始将数据集与其自身合并时创建的变量。

最后,如果连续出现 check = 1,我们会使用条件语句将新值放入结果变量。

关于sas - 需要更改以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20348231/

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