自動生成されたマクロ変数を利用して変数名を一括変更する
[OS] ALL
[リリース] ALL
[キーワード] DATASETS, RENAME, variable, macro
[質問]
データセットに含まれている変数の名前を変更したいと思っています。
[回答]
RENAMEステートメントの引数となる箇所を、あらかじめマクロ変数として定義しておくことで、変数名を列記する手間を省くことが可能です。 下記の例では、SQLプロシジャを用いて「既存の変数名 = n_既存の変数名」とした文字列を変数の数だけ生成し、各々の文字列をブランク区切りでマクロ変数へ格納した後に、DATASETSプロシジャでのRENAMEステートメントの指定に利用しています。 例:SQLプロシジャでを利用したマクロ変数の生成 /* テストデータの作成 */ DATA a; col1=1; col3=3; col5=5; x=123; RUN; /* マクロ変数の生成 */ PROC SQL NOPRINT; SELECT TRIM(name)||'=n_'||TRIM(name) INTO:varlist separated by ' ' FROM sashelp.vcolumn WHERE libname = "WORK" and memname = "A" and UPCASE(name) ? 'COL'; QUIT; /* 変数名の変更 */ PROC DATASETS LIBRARY=work NOLIST; MODIFY a; RENAME &varlist; QUIT; /* 変更の確認 */ PROC CONTENTS DATA=a; RUN; 上記プログラム例で生成されたマクロ変数には、以下の文字列が格納されます。 生成されるマクロ変数の内容例 col1=n_col1 col3=n_col3 col5=n_col5 |