【发布时间】:2016-11-24 16:45:31
【问题描述】:
鉴于以下条件,我需要创建一个新变量 WHLDR。我不确定最后一个 else if 是否正确。所以如果multi > 1 and ref_1 = 0 if rel =0 and ref_1=1 那么第一个满足这个条件的id whldr=1 如果不满足那么whldr =0,然后继续。下面是我的代码和示例数据。
data temp_all;
merge temp_1 (in=inA)
temp_2 (in=inB)
temp_3 (in=inC)
;
by id;
firstid=first.id;
if multi = 1 then do;
if rel = 0 then whldr=1;
else whldr = 0;
end;
else if multi > 1 and ref_1 >= 1 then do;
if rel =0 and ref_1=1 then whldr=1;
else whldr = 0;
end;
else if multi > 1 and ref_1 = 0 then do;
if rel =0 and ref_1=1 then do;
if rel =0 and ref_0 ne '0' then do;
if first.id=1 then whldr=1 ;
else whldr=0;
end;
end;
end;
run;
这里是示例数据:
data have ;
input id a rel b multi ;
cards;
105 . 0 0 1
110 1 0 1 1
110 0 1 1 1
110 . 2 1 1
113 1 0 1 1
113 2 1 1 1
113 0 2 1 1
113 0 2 1 1
135 1 0 1 1
135 0 1 1 1
176 1 0 1 1
176 0 1 1 1
189 1 0 1 1
189 2 1 1 1
189 0 4 1 1
189 0 4 1 1
;
【问题讨论】:
-
你需要更详细地解释你想要什么。例如,您如何定义一个人?你想要整个数据集中的第一个人吗?或在其他一些分组变量中,如状态?发布示例输入和结果数据将有助于阐明您想要什么。
-
这就是我上面的代码。这些人是 whldr,我想要整个数据集中满足最后一个条件的第一个人。我有一个人级别的数据,我正在尝试获取第一个满足该条件的人(B),结果将是一个家庭级别的数据集。
-
如果没有更多关于您想要的信息,我无法评估您复杂的 if/then 结构以查看它是否正确。但是,如果它标记了您想要的观察结果,那么您可能只需要添加一个
output;和stop;语句,以便获得单个观察结果数据集。 -
如何粘贴表格以便查看数据?我正在根据上面指定的条件创建一个新变量“whldr”。
-
该代码不完整。如果您发布说明您的问题的完整代码以及理想情况下的数据,这样我们就可以复制问题,这会有所帮助。否则这是一个猜测问题。
标签: if-statement sas datastep