데이터 단계를 거치는 동안 특정 값의 데이터 집합을 포함하는 문자열 변수를 만드는 방법을 찾고 있습니다. OneTwoFour (또는 더 나은 FourTwoOne) : 데이터 단계를 통한 SAS 변수 연결
AddToStringYN Value
Y One
Y Two
N Three
Y Four
N Five
그래서 결국, 변수가 같을 것이다
예 데이터 work.test을 설정합니다. 이것은 매우 단순 해 보입니다.하지만이를 수행 할 방법을 찾지 못하는 것 같습니다. 나는 또한이 같은 매크로 변수와 함께 작동하도록 시도 :
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar',"&stringvar" || strip(value));
end;
Run;
을하지만이 제공 :
GLOBAL STRINGVAR Four
그래서 내가 마지막 값을 가져옵니다. 나는 이것이이 매크로 기능에 대한 나의 오해 때문에야만한다는 것을 알았지 만 왜 변수에 마지막 값만있는 지 이해할 수 없다. 나는 단지 그것을 실제로 실행 또는 뭔가했다는 symput라는 마지막 시간이었다 생각하지만 난에 코드를 조정 한 후 :
GLOBAL STRINGVARONE One
GLOBAL STRINGVARTWO Two
GLOBAL STRINGVARFOUR Four
: 다음
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar'||strip(value),"&stringvar" || strip(value));
end;
Run;
나는 그들 모두를받을 수 있나요
내 마지막 추측은 데이터 단계를 거치는 것인데, 'call symput ...'행은 실제로 "& stringvar"가 대체 된 매크로 프로세서에 추가되고 마지막 명령문이 모두 실행 된 후에 만 추가됩니다.
이것은 좋은 가정입니까 아니면 다른 설명입니까? 원래의 질문으로 돌아가서 : 이것을 달성하는 쉬운 방법이 있습니까 (원하는 변수가 있습니까)? 간단한데
완전한! 나는 이와 같은 몇 가지 구조 (retain과 sas 변수 재사용의 조합)를 사용하려고 시도했으나 작동하지 않았다. 아직 다른 것을 찾을 수는 없지만 IT가 작동합니다! 그리고 실제로는 충분히 간단합니다 .... 어디를 봐야할지 안다면) 고마워요! (내 논리가 매크로 변수에 맞으면 추가 질문에 대한 생각은 없습니까?) – Yoh
또한 trim (left()) 함수를 cat(), catt(), cats(), catx() 함수로 대체 해보십시오 . 그들은 매우 유연하고, 사용하기 쉽고, 자동 형 변환을 수행합니다! SAS9 이후부터 사용 가능합니다 ... –
@Rob 스트립()을 사용하고 있습니다. – Yoh