我是SAS编程的新手,我正在尝试创建old_variable名称列表,以便我可以使用它们(子集,重命名,空格等),但变量名称有时髦的字符(#,括号,单引号,数字,你的名字)。每个变量用';'分隔 - 分隔源文件采用csv格式。我需要为44个不同的文件做这个,每个文件有大约199个变量。
到目前为止,我已经尝试了一个宏,我创建了一个变量列表,但是,当我尝试使用宏和变量因为特殊字符时,代码失败了。我已经检查了SAS论文005-2013,但我相信我不确定如何使用我的代码中的函数。
任何见解或指示都将不胜感激。这是我到目前为止尝试的代码:
1)导入:
proc import datafile='file_oldname.csv'
dbms=csv
out= oldName
replace;
delimiter=',';
getnames=yes;
run;
2)制作oldNames列表; *一个宏变量,包含旧变量名称; *使用Proc Contents和Proc SQL;
proc contents data=oldName out=listOldName;
run;
options VALIDMEMNAME=EXTEND;
proc sql noprint;
select distinct(name) into:vars separated by " " from listOldName;
quit;
%put &vars;
& vars包含变量列表,但是如果我尝试使用它,则由于特殊字符而失败。
如何正确包装& vars以便可以使用带有特殊字符的变量名?我想用新名称进一步重命名它们。
非常感谢!
答案 0 :(得分:0)
由于您的变量名称包含特殊字符,因此需要以"name literal!"n
格式引用它们。
尝试:
options VALIDVARNAME=ANY;
proc sql noprint;
select distinct nliteral(name)
into:vars separated by ' '
from listOldName;
%put &=var;
documentation中有关名称文字的更多信息。
答案 1 :(得分:0)
运行Proc IMPORT
时,会在导入时创建符合VALIDVARNAME
设置的变量名称的数据集。因此,另一种方法是在IMPORT之前设置选项以确保“干净”变量名称,然后重置它。
%let setting = %sysfunc(getoption(VALIDVARNAME));
options validvarname=v7;
Proc IMPORT ... ;
...;
run;
options validvarname = &SETTING;
实施例
filename have temp;
data _null_;
file have;
put 'Name,"Age","Date of Birth",School:First,Surprise!,-Feedback';
put 'Abel,0,Yesterday,Eastern Acacdemy,Balloons!,None';
run;
options validvarname=any;
proc import file=have replace out=have_any dbms=csv;
getnames=yes;
run;
options validvarname=v7;
proc import file=have replace out=have_v7 dbms=csv;
getnames=yes;
run;
options validvarname=any;