一些东西:
您的数据步骤 #2 不正确 - 它没有 set 语句。此外,它不需要“退出” - 退出仅适用于通常是“编程环境”的某些 PROC,例如 PROC SQL、PROC FORMAT、PROC DATASETS。它不会造成任何伤害,但看起来很奇怪:)
Sequential-in-the-dataset 变量列表是双破折号。所以,你可以用这些简单地创建一个数组:
array myvars relationship--goodideas;
所以如果这对你来说足够好(没有重命名),那么,去吧。如果您真的想重命名它们(IMO 有点坏主意,因为它带走了变量名的某些含义,使代码更难阅读,尽管我理解您想要这样做的原因),您不能使用不幸的是 - 虽然它是正确的,但 RENAME 语句不支持它。
82 ***** does not work ;
83 data svy_1;
84 rename relationship--goodideas = var01-var04;
------------
47
ERROR 47-185: Given form of variable list is not supported by RENAME. Statement is ignored.
85 run;
不幸的是,您不能使用数组来执行重命名语句;所以你必须做其他事情。这是一个答案。
proc contents data=svy out=svy_vars(keep=name varnum) noprint;
run;
proc sort data=svy_vars;
by varnum;
run;
data for_rename;
set svy_vars;
if name in ('relationship' 'outburst' 'checkwork' 'goodideas') then do;
namectr+1;
new_name=cats(name,'=','var',put(namectr,z2.));
output;
end;
run;
proc sql;
select new_name into :renlist separated by ' ' from for_rename;
quit;
proc datasets nolist;
modify svy;
rename &renlist;
quit;
您可以使用 PROC SQL 和 DICTIONARY.COLUMNS 表或数据步骤和 SASHELP.VCOLUMN 以较短的方式执行类似的操作,但是 proc contents 方法对于正在发生的事情更加透明。如果您有四个以上的变量,您可能希望将该 IN 语句更改为否定语句(如果名称不在(不更改的事物列表)),如果这样更容易,或者甚至使用 VARNUM 变量本身来确定您使用哪些变量想要改变(如果 (2:5) 中的 varnum 可以在那里工作)。