sas向列名添加前缀
我需要为表中的某些列名添加前缀。目前的名称范围从sas向列名添加前缀,sas,Sas,我需要为表中的某些列名添加前缀。目前的名称范围从\u 15到\u 49,我只想添加前缀N,给出N\u 15,…,N\u 49等等 我尝试了以下方法: proc sql noprint; select cats(name,'=','N',name) into :prefixlist separated by ' ' from dictionary.columns where libname = 'WORK' and memname = 'Freq_nais_2006_2010'; quit; 但
\u 15
到\u 49
,我只想添加前缀N
,给出N\u 15
,…,N\u 49
等等
我尝试了以下方法:
proc sql noprint;
select cats(name,'=','N',name)
into :prefixlist
separated by ' '
from dictionary.columns
where libname = 'WORK' and memname = 'Freq_nais_2006_2010';
quit;
但是,这没有任何作用,因为我只是在日志输出中获得消息
未选择任何行。我必须更改什么?我从sas网站()找到了以下代码:
您的特殊问题是WHERE子句没有被任何行满足,可能是因为:和memname='Freq\u nais\u 2006\u 2010'
。在SAS中,成员名称通常在内部大写,即使它们在代码中没有大写
否则代码看起来很好,您应该能够在PROC DATASETS
或data step rename语句中使用该&prefixlist.
。我通常建议使用PROC-SQL方法,因为它更容易自定义以指定要重命名的变量,但当然,如果要重命名数据集中的所有变量,宏也可以工作。您只需在代码中的rename语句中列出它们,不需要宏或其他任何东西。尽管最好的办法是在第一时间尽量避免。请参阅下面的重命名语句
data test;
array test(20) _1-_20;
do i=1 to 20;
test(i)=rand('normal', 20);
end;
run;
data test2;
set test;
rename _1-_20 = n_1-n_20;
run;
你非常接近:
proc sql noprint;
select cats(name,'=','N',name)
into :prefixlist
separated by ' '
from dictionary.columns
where libname = 'WORK' and memname = 'FREQ_NAIS_2006_2010'
/* and substr(NAME,1,1) = '_' - can add condition on column name pattern */;
quit;
proc datasets lib=WORK nolist nodetails;
modify FREQ_NAIS_2006_2010;
rename
&prefixlist
;
quit;
将分隔符更改为空格,以便在PROC数据集中使用;修改重命名…
语句。
旁注:datastep变量答案完全重写了数据集,这对于实际使用(大表)来说是无效和危险的,而且对您正在做的事情也不太清楚。这些列名通常是从PROC转置创建的,因为不允许使用数字名,所以在PROC转置中添加了下划线。PROC TRANSPOSE有一个内置的选项来添加前缀,因此值得查看列的创建位置
proc sql noprint;
select cats(name,'=','N',name)
into :prefixlist
separated by ' '
from dictionary.columns
where libname = 'WORK' and memname = 'FREQ_NAIS_2006_2010'
/* and substr(NAME,1,1) = '_' - can add condition on column name pattern */;
quit;
proc datasets lib=WORK nolist nodetails;
modify FREQ_NAIS_2006_2010;
rename
&prefixlist
;
quit;