If statement 使用第一个函数

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

根据以下条件,我需要创建一个新变量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.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最后一块的顶部?