いくつかのこと:
データ ステップ #2 は正しくありません。set ステートメントがありません。また、'quit' は必要ありません。quit は、PROC SQL、PROC FORMAT、PROC DATASETS など、一般に「プログラミング環境」である特定の PROC に対してのみ行われます。害はありませんが、奇妙に見えます:)
データセット内の順次変数リストは二重ダッシュです。したがって、これらを使用して簡単に配列を作成できます。
array myvars relationship--goodideas;
したがって、それで十分である場合 (名前の変更なし)、それを選択してください。本当にそれらの名前を変更したい場合(変数名の意味が取り除かれ、コードが読みにくくなるため、少し悪い考えです。ただし、名前を変更したい理由は理解しています)、使用できません残念ながら、これは正しいのですが、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;
残念ながら、配列を使用して rename ステートメントを実行することはできません。だから、あなたは何か他のことをしなければならないでしょう。これが1つの答えです。
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 コンテンツ メソッドは、何が起こっているかについてより透過的です。4 つ以上の変数がある場合は、その IN ステートメントを否定ステートメント (名前が (変更しないもののリスト) にない場合) に変更する方が簡単な場合、または VARNUM 変数自体を使用してどの変数を使用するかを決定することもできます。変更したい ((2:5) の varnum がそこで機能する場合)。