문제
나는 다음과 같이 보이는 문자열이 있습니다.
"ABAR_VAL", "ACQ_EXPTAX_Y", "ACQ_EXP_TAX", "ADJ_MATHRES2"
그리고 나는 다음과 같이 보이고 싶습니다.
ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2
즉, apostrophes 또는 쉼표 및 단일 공간이 분리되지 않았습니다.
SAS 9.1.3에서 가장 깨끗하고 가장 짧은 방법은 무엇입니까?
바람직하게는 선을 따라 무언가 :
call symput ('MyMacroVariable',compress(????,????,????))
명확하게 말하면, 결과는 단일 공간 분리, 구두점이 없으며 매크로 변수에 포함되어야합니다.
해결책
여기 넌 ..
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 ¯ovar;
다른 팁
이 부분이 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.;
후자의 코드를 사용하는 경우 압축 값이 각 레코드의 변수를 보려면 관측치를 반복해야합니다. :)
여러 블랭크를 하나로 압축하려면 compbl을 사용하십시오. http://www.technion.ac.il/docs/sas/lgref/z0214211.htm
제휴하지 않습니다 StackOverflow