2
proc iml
, if/then
및 call 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/then
proc IML
3) 따라서 세 문을 결합하여 몇 가지 문제로 인해해야합니다.
그러나 4) 작업은
call symputx("withif",1)
이 어떻게 든 이해되었음을 보여줍니다.
조건부로 매크로 변수를 정의하는 적절한 방법은 proc iml
입니까?
데이터 단계 및 절차 내에서 CALL (SYMPUT, SYMGET 등) 사용 습관을 습득해야합니다. 문제는 % PUT % LET % IF이고 프로 시저 또는 데이터 단계가 시작되기 전에 실제로 해석되고 평가됩니다. PROC IML 앞에 첫 번째 % PUT 및 noif를 넣으면 이미 3을 가져야한다고 생각합니다. 값이 다른 값으로 초기화되었는지 확실합니까? – Frazz
그건 내 진짜 코드는 아니지만, 선택의 여지가없는 재현 가능한 예입니다. 나는 단지'& withif'를 사용할 수 없다는 것을 보여주고 싶었지만'% put'을 사용해서는 안된다는 데 동의합니다. 나는 나의 질문을 편집 할 것이고, 나를 깨닫게 해줘서 고마워. 그러나 그 끔찍한 예 (Rick Wicklin이 이미 해결 한 것)를 넘어선 진짜 문제가있었습니다. – Vincent