1

次のような文字列があります。

 "ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"

そして、私はそれを次のようにしたいと思います:

ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2

つまり、アポストロフィやコンマ、単一のスペースで区切られていません。

SAS 9.1.3でこれを行うための最もクリーンで最短の方法は何ですか?

できれば次のようなもの:

call symput ('MyMacroVariable',compress(????,????,????))

明確にするために、結果は単一のスペースで区切られ、句読点がなく、マクロ変数に含まれている必要があります。

4

3 に答える 3

6

どうぞ..

data test;
var1='"ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"';
run;

data test2;
set test;
call symput('macrovar',COMPBL( COMPRESS( var1,'",',) ) );
run;

%put &macrovar;
于 2009-04-05T14:29:16.897 に答える
2

これはinfileステートメントの一部ですか、それともこれらの値を含むマクロ変数を作成したいですか?これがinfileステートメントの一部である場合、区切り文字が適切に設定されていれば、何もする必要はありません。

infile foo DLM=',' ;

もちろん、データステップで、またはマクロ呼び出しの一部として、圧縮関数を使用して文字列から特定の文字を削除することができます。

COMPRESS(source<,characters-to-remove>)

サンプルデータ:

data temp;
     input a $;
datalines;
"boo" 
"123" 
"abc"
;
run;

(マクロ変数を作成するのではなく)データステップの問題を解決します。

data temp2; set temp;
a=compress(a,'"');
run;

マクロ変数の生成中に問題を解決します。

data _null_; set temp; 
call symput('MyMacroVariable',compress(a,'"'));
run;
%put &MyMacroVariable.;

後者のコードを使用する場合、各レコードの変数の圧縮値を確認するには、観測値をループする必要があります。:)

于 2009-04-03T20:16:12.977 に答える
0

複数の空白を1つに圧縮するには、compblを使用します:http ://www.technion.ac.il/docs/sas/lgref/z0214211.htm

于 2009-04-05T04:05:17.223 に答える