If statement 使用第一个函数
根据以下条件,我需要创建一个新变量WHLDR。我不确定最后一个是否正确。因此,如果multi>1,ref_1=0,如果rel=0,ref_1=1,则满足此条件的第一个id whldr=1,如果不满足,则whldr=0,并继续。下面是我的代码和示例数据If statement 使用第一个函数,if-statement,sas,datastep,If Statement,Sas,Datastep,根据以下条件,我需要创建一个新变量WHLDR。我不确定最后一个是否正确。因此,如果multi>1,ref_1=0,如果rel=0,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
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
的变量,并且希望第一个观测值为1,那么您可以像这样运行数据步骤
data want ;
set have (obs=1);
where whldr=1 ;
run;
你需要更详细地解释你想要什么。例如,你如何定义一个人?您想要整个数据集中的第一个人吗?或者在其他一些分组变量中,比如state?发布示例输入和结果数据将有助于澄清您的需求。这是我上面的代码。persons是whldr,我想要整个数据集中满足最后一个条件的第一个人。我有一个个人级别的数据,我正在尝试获取满足该条件的第一个人(B),结果将是一个家庭级别的数据集。如果没有关于您想要什么的更多信息,我无法评估您复杂的if/then结构以查看其是否正确。但是如果它正在标记您想要的观察结果,那么您可能只需要添加一个
输出代码>和停止代码>语句,以便获得单个观测结果数据集。如何粘贴表以便您可以查看数据?我正在根据上面指定的条件创建一个新变量“whldr”。该代码不完整。如果您发布说明您的问题的完整代码,以及理想情况下的数据,这样我们就可以复制问题,这会有所帮助。否则这是一个猜测问题。我正在根据if-then-else语句中的条件创建变量WHLDR。所以WHLDR根据这三个条件得到一个值1或0。第一条记录是第一个id。所以在上面的输入数据集中,id 103有三条记录,所以如果第一条记录满足上面代码的最后一个else if块中的条件,它将得到WHLDR=1。你是指113吗?请注意,使用嵌套IF语句的方式,没有一条示例记录可以到达检查FIRST.ID标志的代码行,因为它们都具有MULTI=1。对不起,是的,我的意思是113。那么您的意思是将FIRST.ID=1移动到else IF最后一块的顶部?