Sas 使用merge命令行合并6000个变量
我有以下问题,我不知道如何做到这一点 我正试图通过下面的代码合并6000个变量 请在下面找到我为其中两个变量编写的代码Sas 使用merge命令行合并6000个变量,sas,Sas,我有以下问题,我不知道如何做到这一点 我正试图通过下面的代码合并6000个变量 请在下面找到我为其中两个变量编写的代码 data big_aat_1; merge Aat_1(rename=(var14=var14_t0 var28=var28_t_0)) Aat_2(rename=(var14=var14_t_1 var28=var28_t_1)) Aat_3(rename=(var14=var14_t_2 var28=var28_t_2)) Aa
data big_aat_1;
merge Aat_1(rename=(var14=var14_t0 var28=var28_t_0))
Aat_2(rename=(var14=var14_t_1 var28=var28_t_1))
Aat_3(rename=(var14=var14_t_2 var28=var28_t_2))
Aat_4(rename=(var14=var14_t_3 var28=var28_t_3))
Aat_5(rename=(var14=var14_t_4 var28=var28_t_4))
Aat_6(rename=(var14=var14_t_5 var28=var28_t_5));
by nouv_date;
run;
data big_aat_1;
merge Aat_1(rename=(var14=var14_t0 var28=var28_t_0 var37=var37_t_0 ...))
Aat_2(rename=(var14=var14_t_1 var28=var28_t_1 var37=var37_t_1 ...))
Aat_3(rename=(var14=var14_t_2 var28=var28_t_2 var37=var37_t_2 ...))
Aat_4(rename=(var14=var14_t_3 var28=var28_t_3 var37=var37_t_3 ...))
Aat_5(rename=(var14=var14_t_4 var28=var28_t_4 var37=var37_t_4 ...))
Aat_6(rename=(var14=var14_t_5 var28=var28_t_5 var37=var37_t_5 ...));
by nouv_date;
run;
我的目标是尝试为我拥有的6000个变量自动化我的一段代码,并保持我的方式,例如使用合并
结果将是所有变量都与下面的一样。…
表示其余变量
data big_aat_1;
merge Aat_1(rename=(var14=var14_t0 var28=var28_t_0))
Aat_2(rename=(var14=var14_t_1 var28=var28_t_1))
Aat_3(rename=(var14=var14_t_2 var28=var28_t_2))
Aat_4(rename=(var14=var14_t_3 var28=var28_t_3))
Aat_5(rename=(var14=var14_t_4 var28=var28_t_4))
Aat_6(rename=(var14=var14_t_5 var28=var28_t_5));
by nouv_date;
run;
data big_aat_1;
merge Aat_1(rename=(var14=var14_t0 var28=var28_t_0 var37=var37_t_0 ...))
Aat_2(rename=(var14=var14_t_1 var28=var28_t_1 var37=var37_t_1 ...))
Aat_3(rename=(var14=var14_t_2 var28=var28_t_2 var37=var37_t_2 ...))
Aat_4(rename=(var14=var14_t_3 var28=var28_t_3 var37=var37_t_3 ...))
Aat_5(rename=(var14=var14_t_4 var28=var28_t_4 var37=var37_t_4 ...))
Aat_6(rename=(var14=var14_t_5 var28=var28_t_5 var37=var37_t_5 ...));
by nouv_date;
run;
有两件事我需要陈述
1) 我有一个数据集/表,其中包含所有不同的变量名(例如var14、var28…)。如果我能用它就好了。数据集的名称为dicoAg
2) 我需要保留合并
,因为有些原因我不能在这里讨论
如果你对每个人都有所了解
没有详细说明,我和我的男朋友就这么做了
data big_aat_1;
merge %do j=1 %to 6 ; Aat_&j(rename=(%do i=1 %to &&&&nvar&&pays&l ; &&&&var&&pays&l.._&i=&&&&var&&pays&l.._&i.._t%eval(&j-1) %end ; )) %end ; ;
by nouv_date;
run;
不是完美的,也不是超级高效的,但是做的很好
说明:
&&&&&nvar&&PAYES&l
是变量的最大数量
&&&&var&&pays&l..\u&i
是变量
结果会给你类似的东西
merge Aat_1(rename=( var1=var1_t0 var31=var31_t0 var60=var60_t0 var90=var90_t0 var119=var119_t0 ...
Aat_6(rename=( var1=var1_t5 var31=var31_t5 var60=var60_t5 var90=var90_t5 var119=var119_t5...
最好。我开始创建测试数据集(显然您已经有了): 然后我使用了
proc contents
来创建变量列表(您可以跳过这一步,使用dicoAg
):
然后让sas为您编写重命名代码:
data _NULL_;
set vars /*dicoAg*/(where=(NAME^="nouv_date")) end=fine;
file "MyPath\Rename.sas";
if _N_=1 then do;
put '%MACRO RENAME(J=); ';
put '(rename=( ';
end;
/*intead of NAME use the variable in dicoAg which contains all the variables' names*/
put ' ' NAME '=' NAME +(-1) '_&J';
if fine then do;
put ' )) ';
put '%MEND; ';
end;
run;
包括以下代码:
%include "MyPath\Rename.sas";
最后,编写宏进行合并:
%MACRO P;
data big_aat_1;
merge
%DO D=1 %TO 6;
aat_&D. %RENAME(J=&D)
%END;
;
by nouv_date;
run;
%MEND;
%P;
我想用一个双循环的宏。。。你觉得怎么样?谢谢@user3645882。我明天就试试那个。再次感谢你的帮助。