我遇到了以下问题,我不确定如何做到这一点。
我正在尝试通过以下代码合并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;
我的目标是尝试自动化我的6000个变量的代码片段,并保持我的方式,例如使用merge
。
结果将所有变量都如下所示。 ...
代表其余变量
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;
我需要陈述 2 的事情
1)我有一个包含所有不同变量名称的数据集/表(例如var14,var28 ......)。如果我可以使用它会很棒。数据集的名称为dicoAg
2)我需要保留merge
由于某些我无法在此讨论的原因。
如果您有任何见解
答案 0 :(得分:0)
每个人,
没有详细说明,我的男人和我做了那个
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&&pays&l
是变量的最大数量
&&&&var&&pays&l.._&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...
最佳。
答案 1 :(得分:0)
我开始创建测试数据集(显然你已经拥有它们):
%MACRO P;
%DO I=1 %TO 6;
data aat_&I;
%DO J=1 %TO 6000;
var&J=&J;
%END;
nouv_date=1;output;
run;
%END;
%MEND;
%P;
然后我使用proc contents
来获取变量列表(您可以跳过此步骤并使用dicoAg
):
proc contents data=aat_1 varnum out=vars;run;
然后你有sas为你写rename
代码:
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;