自動生成されたマクロ変数を利用して変数名を一括変更する
[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 |
|