문제

나는 다음과 같이 보이는 문자열이 있습니다.

 "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 &macrovar;

다른 팁

이 부분이 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top