sas中的表查找

sas中的表查找,sas,Sas,我有两个表,我想通过匹配T1的型号和年龄以及T2的型号和年龄来输出。我已经使用了代码,并且得到了空白输出。输出应如下面的输出表所示 Table:1 MODEL AGE1 AGE2 AGE3 AGE4 SLOT1 0-10 10-20 20-35 35p SLOT1 0-10 10-20 20-35 35p SLOT1 0-10 10-20 20-35 35p SLOT2 0-10 10-20

我有两个表,我想通过匹配T1的型号和年龄以及T2的型号和年龄来输出。我已经使用了代码,并且得到了空白输出。输出应如下面的输出表所示

Table:1

MODEL    AGE1   AGE2    AGE3    AGE4  
SLOT1    0-10   10-20   20-35   35p  
SLOT1    0-10   10-20   20-35   35p  
SLOT1    0-10   10-20   20-35   35p 
SLOT2    0-10   10-20   20-35   35p
SLOT2    0-10   10-20   20-35   35p
SLOT3    0-10   10-20   20-35   35p

Table:2

   MODEL    AGE_BT          FHA
   SLOT1    0-10            600 
   SLOT1    10-20           435   
   SLOT1    20-35           210  
   SLOT1       35P           10  
   SLOT2    0-10            391  
   SLOT2    10-20           385   
   SLOT2    20-35           246
   SLOT2       35P            0  
   SLOT3    0-10            391  
   SLOT3    10-20           385   
   SLOT3    20-35           246
   SLOT3       35P            0 


OUTPUT TABLE

MODEL   AGE1    AGE2    AGE3    AGE4  SEG_AGE1  SEG_AGE2 SEG_AGE3   SEG_AGE4    
SLOT1   0-10    10-20   20-35   35p     600     435        210     10 
SLOT1   0-10    10-20   20-35   35p     600     435        210     10 
SLOT1   0-10    10-20   20-35   35p     600     435        210     10
SLOT1   0-10    10-20   20-35   35p     600     435        210     10 
SLOT1   0-10    10-20   20-35   35p     600     435        210     10 
SLOT1   0-10    10-20   20-35   35p     600     435        210     10  
SLOT2   0-10    10-20   20-35   35p     391     385        246      0 
SLOT2   0-10    10-20   20-35   35p     391     385        246      0  
SLOT2   0-10    10-20   20-35   35p     391     385        246      0
SLOT2   0-10    10-20   20-35   35p     391     385        246      0


%macro age(ageap);
%let n=%sysfunc(countw(&ageap));

proc sql;
create table segment_test2_  as
select distinct T1.*
%do i=1 %to &n;
%let ap = %scan(&ageap,&i);
,T2.FHA as SEG_&ap
%end;
from      segment_test1 T1
left join ANNUAL_FH     T2
on  T1.Model=T2.Model and T1.&ap=T2.AGE_BT;
quit;
%mend;

%age(AGE1 AGE2 AGE3 AGE4);

使用MPRINT,您应该会看到以下代码:

74   options mprint;
75   %age(AGE1 AGE2 AGE3 AGE4);
MPRINT(AGE):   proc sql;
MPRINT(AGE):   create table segment_test2_ as select distinct T1.* ,T2.FHA as SEG_AGE1 ,T2.FHA as SEG_AGE2 ,T2.FHA as SEG_AGE3
,T2.FHA as SEG_AGE4 from segment_test1 T1 
left join ANNUAL_FH T2 on T1.Model=T2.Model and T1.AGE4=T2.AGE_BT;
请注意结尾处的
T1.AGE4=T2.AGE\u BT
。根据您的样本,AGE_BT必须左对齐,并将大小写降低到可能等于AGE4的位置,如下所示:

T1.AGE4=lowcase(left(T2.AGE_BT))

使用MPRINT,您应该会看到以下代码:

74   options mprint;
75   %age(AGE1 AGE2 AGE3 AGE4);
MPRINT(AGE):   proc sql;
MPRINT(AGE):   create table segment_test2_ as select distinct T1.* ,T2.FHA as SEG_AGE1 ,T2.FHA as SEG_AGE2 ,T2.FHA as SEG_AGE3
,T2.FHA as SEG_AGE4 from segment_test1 T1 
left join ANNUAL_FH T2 on T1.Model=T2.Model and T1.AGE4=T2.AGE_BT;
请注意结尾处的
T1.AGE4=T2.AGE\u BT
。根据您的样本,AGE_BT必须左对齐,并将大小写降低到可能等于AGE4的位置,如下所示:

T1.AGE4=lowcase(left(T2.AGE_BT))

我怀疑你得到的是“空白”输出。日志里发生了什么?错误?或者它的工作语法是明智的,只是返回零行?嗨,乔,数据中有一些错误。现在我已经更新和它的工作了。谢谢..为什么所需的输出表有7个相同的slot1行?两个输入表都没有7个slot1。您尝试的查询是1左连接2,因此我认为您需要4个插槽1行。您好,Dompazz,表1中有唯一的ID(变量),我怀疑您是否得到“空白”输出。日志里发生了什么?错误?或者它的工作语法是明智的,只是返回零行?嗨,乔,数据中有一些错误。现在我已经更新和它的工作了。谢谢..为什么所需的输出表有7个相同的slot1行?两个输入表都没有7个slot1。您尝试的查询是1 left join 2,因此我认为您需要4个插槽1行。嗨,Dompazz,表1Hi Vasja中有唯一的ID(变量),我得到了我想要的输出,仍然会尝试一下,谢谢。我已经尝试过了,现在它可以工作了。。选项SYMBOLGEN MPRINT MLOGIC;%宏AG;%设AA=1;%i是否=0%到3;%让apS=%EVAL(&AA+&i);proc-sql;创建表段和apS作为选择不同的T1.*,T2.Average\U FH/12作为段和apS从T1左连接到最终。年度平均T2在T1上。Model=T2.Model和T1.age&apS=T2.age\U括号;退出;%结束;%mend AG;%AGHi Vasja,我得到了我想要的输出,仍然会尝试一下,谢谢,我已经尝试过了,现在它可以工作了。。选项SYMBOLGEN MPRINT MLOGIC;%宏AG;%设AA=1;%i是否=0%到3;%让apS=%EVAL(&AA+&i);proc-sql;创建表段和apS作为选择不同的T1.*,T2.Average\U FH/12作为段和apS从T1左连接到最终。年度平均T2在T1上。Model=T2.Model和T1.age&apS=T2.age\U括号;退出;%结束;%mend AG;%银