List 宏在对列排序后进行转置并添加前缀';名字

List 宏在对列排序后进行转置并添加前缀';名字,list,macros,sas,prefix,transpose,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; /*......m

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

我在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”,而是在retain之后才引入的原因(这对列的排序很有用)

当我尝试引入前缀(在排序之后)时,问题就开始了。

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

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

我的下一步是:

proc datasets library=labo2;
modify D_tr_&var.0;
rename &prefijolista;
quit;
但我不能做,直到我完成了前一个

因此,我不知道如何在转置之后对列进行排序,以及如何添加前缀

我怎样才能解决这个问题


谢谢

您需要使用类似于
PROC DATASETS
的方法重命名列

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

《基本SAS指南》中有一个文档示例,位于
PROC数据集的doc下。
可在线访问:

问题在于宏中的cats函数中的&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;

不是很直截了当,但很有效。:)

这将是下一步,但我想用一个列表来完成(因为有很多变量)。你需要在你的问题中提供更多的上下文。不清楚这是否是你所尝试的。显示代码和日志中的错误。我认为RPO问题是因为变量&var get“monto”和“monto”既不是列也不是常量。但我还是不知道如何修复它。