带有变量名称后缀的SAS循环或数组

带有变量名称后缀的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

我有两个表,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
    ,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);

没问题。使用宏循环列表是一种非常常见的需求。一旦你学会了,你可以做很多事情。