2017-03-19 1 views
0

저는 SAS가 처음이므로이 질문이 너무 간단한 경우 사과드립니다. 나는 이것에 대해 광범위한 조사를 해왔고 계속 진행하는 방법이 분명하지 않습니다.증가하는 방식으로 전역 매크로 변수로 SAS 데이터 세트 초기화

이미 존재하는 매크로 변수 var1, ..., varN에 해당하는 기능으로 새 SAS 데이터 세트를 초기화하려고합니다. 단순화를 위해 N은이 변수에 대한 생성 프로세스에서 매크로 변수로 이미 정의되어 있다고 가정합니다. 나는 작동하지 않는 다음 코드의 라인을 따라 뭔가를하고 싶지 :

%let var1 = 3; 
%let var2 = 2.5; 
%let var3 = 1; 
[...] 
%let varN = 2; 


Data ABC; 
    do i = 1 to &N; 
    x = var&i.; 
    end; 
run; 

내가 문제 중 하나가 할 %는 달리, "나는"매크로 변수 아니라고 믿습니다. cat (var, i)에서 변형을 시도했지만, & var &을 해결해야하므로 원하는 동작이 없습니다. 데이터 단계 내에서이 작업을 수행 할 수있는 방법이 있습니까?

답변

3

이렇게하는 것이 실제로 좋은 생각인데 상상할 수는 없지만 대답은 여기에 있습니다. 표준 매크로 변수 & & var &을 사용할 수 없습니다. 왜냐하면 % DO 루프가 필요하기 때문입니다. 데이터 단계에서이를 유지하려면 SYMGET을 사용하십시오.

%let var1=1; 
%let var2=2; 
%let var3=3; 
%let N=3; 

Data ABC; 
    do i=1 to &N; 
     x = symget(catt('var', i)); *character value; 
     y = symgetN(catt('var', i)); *numeric value; 
     output; 
    end; 
run; 

proc print data=abc; 
run; 
+0

@Reeza. 왜 이것이 좋은 생각이 아니 겠는가에 대해 교육시켜 주시겠습니까? 더 나은 접근 방법은 무엇입니까? – Lepidopterist

+1

symgetN - X는 숫자 여야합니다. –

+0

감사합니다. @data_null_, 변경했습니다. – Reeza

관련 문제