SAS データセットの一連の変数から最後の 3 文字を削除したいと考えています。(2 つのデータセットを連結する必要があります。)
最初のセットでは、変数の名前は次のようになります: abc 、 def 、 ghi ...
2 番目のセットでは、abc_1A、def_1A、ghi_1A ... という名前が付けられています。
100 以上の変数から「_1A」を削除するにはどうすればよいですか? 最初のデータセットに単純に「_1A」を追加したくない
ありがとう
SAS データセットの一連の変数から最後の 3 文字を削除したいと考えています。(2 つのデータセットを連結する必要があります。)
最初のセットでは、変数の名前は次のようになります: abc 、 def 、 ghi ...
2 番目のセットでは、abc_1A、def_1A、ghi_1A ... という名前が付けられています。
100 以上の変数から「_1A」を削除するにはどうすればよいですか? 最初のデータセットに単純に「_1A」を追加したくない
ありがとう
いくつかのオプションがあります。ここに 1 つの「安全な」オプションと 1 つの「安全でない」オプションがあります。
安全なオプション:
変数の名前を _1A. なしの名前に変更するマクロを作成します。引数: var = 変数名、len = 最終的な変数名に必要な長さ。;
%macro rename_shorter(var=,len=);
&var. = %substr(&var.,1,&len.)
%mend rename_shorter;
Dictionary.columns から呼び出しのリストを作成します。
proc sql;
select cats('%rename_shorter(var=',name,',len=',length(name)-3,')')
into :renamelist separated by ' '
from dictionary.columns
where libname='SASHELP' and upcase(memname)='CLASS';
quit;
そのリストを呼び出します。
data want;
set sashelp.class(rename=(&renamelist.));
run;
物事が正しく配置されていることをチェックしないという意味で、安全でないオプションは次のとおりです。
proc sql;
create table want as
select * from have_namedright H
outer union corr
select * from have_namedwrong W
;
quit;