2016-08-31 2 views
0

문자열을 포함하는 변수를 매크로에 할당하는 방법은 무엇입니까?SAS : 매크로 할당

%let HOLD_MONTHS=1; 

data _null_; 
if &HOLD_MONTHS=1 then hold='h1m'; 
*temp='model_h1m'; 
temp=catx('_','model',hold); 
*how to assign 'model_h1m to the macro a?; 
%let a = %str(temp); 
run; 
*now the following print "temp"; 
%put &a; 
+0

은'%의 let' 나는 아래의 코드의 코멘트에 내 질문에 넣었습니다 명령문은 매크로 컴파일시, 즉 데이터 단계가 컴파일되기 전에 실행됩니다. 그 순간, '임시 직원'은 프로그램의 일부인 텍스트 만 존재합니다. 변수와 같은 것은 없습니다. –

답변

1

당신은 데이터 단계에서 변수의 값을 할당 할 call symput을 사용할 수 있습니다, 예를 들면 :

%let HOLD_MONTHS=1; 

data _null_; 
if &HOLD_MONTHS=1 then hold='h1m'; 
temp=catx('_','model',hold); 
call symput('a',temp); 
run; 

%put &a; 
+0

'call symput'은'step '이 실제로 값을 포함 할 수있는 변수 인 경우 데이터 단계의 일부로 실행됩니다. –

+0

예를 들어 C++과 달리 SAS 코드는 단계적으로 컴파일되므로 데이터 단계는' 'run'이 해석 된 후에 put & a;'를 넣는다. 그 이유는 SAS가 '호출 회귀 (call symput)'를 가지고 있고 C++에 그러한 것이 없다는 것입니다. –