2014-05-21 3 views
2

proc iml, if/thencall symputx을 결합하는 데 문제가 있습니다. 나는 다음과 같은 코드를 실행하면 :매크로 내부에서 매크로 변수를 조건부로 정의하는 방법은 무엇입니까?

proc iml; 

call symputx("noif",3); 
a=1; 
b=&noif;        /* 1) : works*/ 
if a=1 then call symputx("withif",1); 
if a=1 then print a;     /* 2) : works */ 
c=&withif;       /* 3) : doesn't work */ 
quit; 
%put &withif;       /* 4) : works */ 
  • 1) 작업을 (그리고 SAS/IML 문서) 쇼는 내가 proc IML

  • 2) 작업 (및 SAS/IML 문서) 쇼에서 call symputx을 사용할 수 있습니다 사용할 수 있습니다 if/thenproc IML

  • 3) 따라서 세 문을 결합하여 몇 가지 문제로 인해해야합니다.

  • 그러나 4) 작업은 call symputx("withif",1)이 어떻게 든 이해되었음을 보여줍니다.

조건부로 매크로 변수를 정의하는 적절한 방법은 proc iml입니까?

+1

데이터 단계 및 절차 내에서 CALL (SYMPUT, SYMGET 등) 사용 습관을 습득해야합니다. 문제는 % PUT % LET % IF이고 프로 시저 또는 데이터 단계가 시작되기 전에 실제로 해석되고 평가됩니다. PROC IML 앞에 첫 번째 % PUT 및 noif를 넣으면 이미 3을 가져야한다고 생각합니다. 값이 다른 값으로 초기화되었는지 확실합니까? – Frazz

+1

그건 내 진짜 코드는 아니지만, 선택의 여지가없는 재현 가능한 예입니다. 나는 단지'& withif'를 사용할 수 없다는 것을 보여주고 싶었지만'% put'을 사용해서는 안된다는 데 동의합니다. 나는 나의 질문을 편집 할 것이고, 나를 깨닫게 해줘서 고마워. 그러나 그 끔찍한 예 (Rick Wicklin이 이미 해결 한 것)를 넘어선 진짜 문제가있었습니다. – Vincent

답변

2

릭 위클린이 내 질문에 his blog에 답변했습니다. 기본적으로, 나는 그들이 완성되었다는 것을 알기 위해 if/then 블럭 뒤에 빈 else 문장을 추가해야했습니다.

관련 문제