2016-07-26 6 views
1

숫자 변수를이 매크로에 전달하려고합니다. KEEP 및 SET 문을 통해 전달할 수 있지만 RENAME 문을 가져 오면 이러한 오류가 발생합니다.SAS에서 숫자 열 이름 사용

오류 : '2013'n 변수가 WORK에 없습니다 .'2013'n.

오류 : 파일 WORK.'2013'n에 잘못된 DROP, KEEP 또는 RENAME 옵션이 있습니다.

%macro step2(year,cwyear); 
    TITLE; FOOTNOTE; 
    DATA WORK._EG_CFMT; 
     LENGTH label $ 9; 
     SET WORK."&year."n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label)) END=__last; 
     RETAIN fmtname "cw&year."n type "C"; 

     end=start; 

       RUN; 
    %mend step2; 

큰 따옴표를 & 년으로 변경하면 어떻게됩니까? 이 같은 작은 따옴표로 :

ERROR :

SET WORK.'&year.'n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label)) 

이 오류가 얻을. 파일 WORK를 ' & YEAR.'n.DATA가 존재하지 않습니다.

내가 다시 모든 따옴표로 변경하고 제거 N의, 나는 다음과 같은 오류 얻을 :

ERROR 22-322 : 다음 중 하나를 기대 구문 오류 : 이름, 인용 된 문자열,,, CUROBS, END, INDSNAME, KEY, KEYRESET, 키, NOBS, OPEN, POINT, 데이터, LAST, NULL.

어떻게하면됩니까?

도움 주셔서 감사합니다.

+0

왜 당신은'n'를 제거하는 방법은 무엇입니까? – Joe

+0

원래 코드에 큰 따옴표와 n이 있고 오류가 발생했기 때문입니다. 나는 이미 알고있는 것과 다른 것을 시험하려고 노력하고 있었다. – theponcer

+1

원래 오류 메시지는 변수가 존재하지 않는다는 것입니다. 레이블 대신 이름으로 변수를 참조하지 않으시겠습니까? – Tom

답변

4

큰 따옴표와 n이 필요합니다. 이름 리터럴은 다른 문자열과 마찬가지로 작은 따옴표 나 큰 따옴표를 사용할 수 있습니다. 작은 따옴표는 내부의 매크로 변수를 해결하지 않습니다.

예 : 큰 따옴표로 변경할 때

options validvarname=any; 
options validmemname=extend; 

data '2015'n; 
    '2015'n = 5; 
run; 

%macro do_something(year=); 
    data work.want; 
    set "&year."n(rename="&year."n = start); 
    run; 
%mend do_something; 

%do_something(year=2015); 
+0

그러나 제가 그 모범에서 내가하고있는 것이 아닙니까? – theponcer

+0

위의 내용은 정확합니다 (예를 들면 작동합니다). 귀하의 사례가 정확히 동일하다면 문제가 어디에 있는지 알 필요가 있습니다. 'options' 문에 주목하십시오 - 그것들은 중요 할 수 있습니다. ''2015'n'보다는'_2015' 또는'_015'이 없는지 확인하십시오. – Joe