带有变量名称后缀的SAS循环或数组
我有两个表,T1包含10个变量,T2。包含100个变量。我必须用T1乘以10个变量,用T2乘以相同的10个变量,只改变姓氏。我希望将变量名保持在循环中,并输出为TOTAL 例如:应用程序将替换为:商店、坡道、阿布希、海岸、recyc、工业等带有变量名称后缀的SAS循环或数组,sas,Sas,我有两个表,T1包含10个变量,T2。包含100个变量。我必须用T1乘以10个变量,用T2乘以相同的10个变量,只改变姓氏。我希望将变量名保持在循环中,并输出为TOTAL 例如:应用程序将替换为:商店、坡道、阿布希、海岸、recyc、工业等 proc sql; create table OHDT as select T2.Model,T2.Age, sum( T1.Com_Pass * T2.Com_Pass_app ,T1.Com_Frt * T2.Com_Frt_app
proc sql;
create table OHDT as
select T2.Model,T2.Age,
sum( T1.Com_Pass * T2.Com_Pass_app
,T1.Com_Frt * T2.Com_Frt_app
,T1.Com_Other * T2.Com_Other_app
,T1.BG_Corp * T2.BG_Corp_app
,T1.BG_Fract * T2.BG_Fract_app
,T1.BG_Gov * T2.BG_Gov_app
,T1.BG_Other * T2.BG_Other_app
,T1.BG_Owner * T2.BG_Owner_app
,T1.BG_Part * T2.BG_Part_app
,T1.mil_Agri * T2.mil_Agri_app ) as Total_app,
from Market T1
inner join master T2
on
T1.Model= T2.Model and T1.Age=T2.Age;
quit;
您可以使用宏在列表上循环并为您生成SQL
%macro create_OHDT(apps);
%let n=%sysfunc(countw(&apps));
proc sql;
create table OHDT as
select T2.Model,T2.Age
%do i=1 %to &n;
%let app = %scan(&apps,&i);
,sum( T1.Com_Pass * T2.Com_Pass_&app
,T1.Com_Frt * T2.Com_Frt_&app
,T1.Com_Other * T2.Com_Other_&app
,T1.BG_Corp * T2.BG_Corp_&app
,T1.BG_Fract * T2.BG_Fract_&app
,T1.BG_Gov * T2.BG_Gov_&app
,T1.BG_Other * T2.BG_Other_&app
,T1.BG_Owner * T2.BG_Owner_&app
,T1.BG_Part * T2.BG_Part_&app
,T1.mil_Agri * T2.mil_Agri_&app ) as Total_&app
%end;
from Market T1
inner join master T2
on
T1.Model= T2.Model and T1.Age=T2.Age;
quit;
%mend;
%create_OHDT(store ramp abhi coast recyc ind);
没问题。使用宏循环列表是一种非常常见的需求。一旦你学会了,你可以做很多事情。