If statement SAS合并,如果然后返回两个结果

If statement SAS合并,如果然后返回两个结果,if-statement,merge,sas,unique,If Statement,Merge,Sas,Unique,在下面的SAS合并代码中,我似乎找不到使用and if then或仅在unique命令下面使用if语句的方法。我正在匹配所有相同的S2_Liab编号,只是在“责任”列中有不同标题的地方拉一个不同的编号 对于上面的第一个if-then语句,我没有得到任何结果,相反,代码似乎直接跳到了第二个if-then语句 这些是我的结果,显示了第二个if语句(“FD_费用”)的所有数字,但“p_费用”的空白答案。出于某种原因,程序跳过第一条if语句,并打印出第二条if语句的答案。我也尝试过if-then-el

在下面的SAS合并代码中,我似乎找不到使用and if then或仅在unique命令下面使用if语句的方法。我正在匹配所有相同的S2_Liab编号,只是在“责任”列中有不同标题的地方拉一个不同的编号


对于上面的第一个if-then语句,我没有得到任何结果,相反,代码似乎直接跳到了第二个if-then语句

这些是我的结果,显示了第二个if语句(“FD_费用”)的所有数字,但“p_费用”的空白答案。出于某种原因,程序跳过第一条if语句,并打印出第二条if语句的答案。我也尝试过if-then-else语句,但得到了相同的答案


有人知道如何实现这一点吗?

这听起来像是特定于您的数据。SAS当然不会“跳过”您的if语句;它找不到任何相同的匹配项。有很多潜在的原因,包括没有任何匹配,变量的长度不同,等等。你的日志给你提供了什么信息吗?日志没有说任何有用的东西。我知道数据与现在正在“跳过”的第一组数据相匹配,因为我先测试了该批数据,然后添加了第二条if语句。然后您丢失了一些内容,或者更改了一些您不知道的内容。SAS不会跳过if语句,并且从编程的角度来看,数据步骤很好。将nodupkey替换为(proc意味着noprint;by S2_Liab;output out=unique(drop=_type_freq)sum=;run;)这将列视为excel中的数据透视表。我的程序不是“跳过”的,只是获取第一行名称的第一个数字。
/*--------------------------------------------------------------------------------------
/*---- Additional Partner and/or Corporation charge ----------  
/*--------------------------------------------------------------------------------------
data full;
 set whole_FR; 
 record_num=_N_;
 S2_Liab = S2LiabLimit;

run;

proc sort; 
by S2_Liab;
run;

data unique(keep=S2_Liab S2Partners P_charge FD_charge); 
 set WORK.FR_S2_Mandatory_Liab_Cov; 
 S2_Liab = Liability_Lmt;

if Additional = "Partner_Corp" then P_charge = round(&thestate.,0.01);
if Additional = "Farm_Dwelling" then FD_charge = round(&thestate.,0.01);

run;

proc sort nodupkey; 
by S2_Liab;
run;

data match nonmatch; 
 merge full(in=a) unique(in=b);

 by S2_Liab;
 if a=1 and b=1 then output match;
 if a=1 and b=0 then output nonmatch;
 run;

data whole_FR;
 set match nonmatch;

proc sort;
 by record_num;
run;