宏在转换列并命名列之后添加前缀

时间:2014-09-03 02:18:57

标签: list macros sas prefix transpose

我需要运行一个为多个变量执行转置的宏(并为每个变量创建一个表),对列名称进行排序,这些名称是数字,但也作为前缀添加变量的名称(这是一个字符串)

我在SAS中有一个宏来执行转置,在转置中使用不同的变量作为var。代码是:

%macro transponer(var);
proc transpose data=labo2.A_svm_200711_200806
out=labo2.D_tr_&var.0;
var &var;
id mes;
by cid;
run;

/*......more code.....*/

select cats(name, '=', &var, name)
into :prefijolista
separated by ' '
from dictionary.columns 
where libname='LABO2' and memname= cats('D_TR_',upcase(&var))
and name like '_20%';
quit;
%put &prefijolista;
%mend;

因为mes是数字我想要对变量进行排序,这就是为什么我没有在proc转置中引入“prefix& var”,而是在保留之后我做了它(这对于排序列很有用)。

当我尝试引入前缀(订购后)时,问题就开始了。

由于其中一个变量的名称例如是“monto”,我得到以下错误(因为它是转置中的var变量,而不是转置表中的列名):

  

在贡献表中找不到以下列:   蒙托。

我的下一步将是:

proc datasets library=labo2;
modify D_tr_&var.0;
rename &prefijolista;
quit;

但是我不能这样做,直到我完成了前一个。

所以我不知道如何在转置后订购列,也添加前缀。

我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要使用PROC DATASETS等内容重命名列。

proc datasets lib=work nolist;
modify myDataSet;
rename old_col_name = new_col_name;
run;
quit;

PROC DATASETS.的文档下的Base SAS指南中提供了一个文档示例。该文档可在线获取:http://support.sas.com/documentation/cdl/en/proc/67327/HTML/default/viewer.htm#n0mfav25learpan1lerk79jsp30n.htm

答案 1 :(得分:0)

问题在于,在一个宏内部的cat函数中使用& var来使用

  

" "

你也可以使用

sysfunc(cats(D_TR, &a)

所以最后代码将保持如下:

%let a = %upcase(&var);
%put &a;
%let b=%sysfunc(cats(D_TR_,&a));
%put &b;

proc sql;
select cats(name, '=', "&var" , name)
into :prefijolista
separated by ' '
from dictionary.columns 
where libname='LABO2' and memname= "&b"
and name like '_20%';
quit;
%put &prefijolista;
%put "&b";


PROC datasets library=LABO2;
modify &b;
rename &prefijolista;
quit;
%put "ult" &b;

不是很直白,但很有效。 :)