2016-12-18 1 views
0

SAS에서 데이터 단계 내의 루프에서 매크로 변수를 호출하는 방법을 알아 내려했지만 손실되었습니다. 그래서 나는 14 개의 매크로 변수를 가지고 있으며 각각을 벡터의 엔트리와 비교해야만한다. 나는 시도했다 :SAS의 루프에서 매크로 변수를 해결하는 방법

data work.calendrier; 
set projet.calendrier; 
do i=1 to 3; 
if date= "&vv&i"D then savinglight = 1; 
end; 
run; 

그러나 작동하지 않는다. 변수 vv1 ~ vv3은 날짜 변수입니다. 예를 들어,이 코드는 다음과 같이 작동합니다.

data work.calendrier; 
set projet.calendrier; 
*do i=1 to 3; 
if date= "&vv1"D then savinglight = 1; 
*end; 
run; 

그러나 루프를 사용하면 매크로 변수를 확인할 수 없습니다.

+0

배열 대신 매크로 변수를 사용하는 이유가 있습니까? – Reeza

+0

코드에서 '벡터'가 아닌 하나의 변수 만있는 것처럼 보입니다. DATE의 값이 매크로 변수 값 중 하나와 일치하면 새 변수를 1로 설정 하시겠습니까? – Tom

답변

0

매크로 변수를 vv1, vv2, vv3과 같은 숫자 색인으로 참조하려면 먼저 &을 해결해야합니다.

SAS에는 값 단계가 데이터 단계 프로세서에 도달하기 전에 값을 확인하는 별도의 매크로 프로세서가 있습니다.

기본적으로, 당신은 당신의 매크로 변수의 시작 부분에 추가 앰퍼샌드를 추가 할 필요가 : 여기 어떻게됩니까

&&vv&i -> &vv1 -> "Value of vv1" 
&&vv&i -> &vv2 -> "Value of vv2" 
&&vv&i -> &vv3 -> "Value of vv3" 

은 휴식을 찾을 때까지 SAS는 앰퍼샌드 후 정보를 읽는 것입니다. 그런 다음 SAS는 & &을 하나의 &으로 확인한 다음 & i가 숫자 값이 될 때까지 계속 읽습니다. 그런 다음 필요한 & vvi 변수를 사용합니다.

이 흥미로운 주제에 대한 소스의 몇 : SAS 컴파일 및 데이터 단계를 실행하기 전에

http://www2.sas.com/proceedings/sugi29/063-29.pdf http://www.lexjansen.com/nesug/nesug04/pm/pm07.pdf

0

매크로 변수 참조가 해결됩니다. 먼저 SAS 문을 사용하여 원하는 작업을 수행해야하며, 필요한 경우 매크로 코드를 사용하여 이러한 문을 생성 할 수 있습니다.

변수 값이 값 목록 중 하나와 일치하는지 테스트하려면 IN 연산자를 사용하는 것이 좋습니다.

0

매크로를 사용해야합니다. 기본 접근법은 다음과 같습니다.

%let vv1 = 9; 
%let vv2 = 2; 
%let vv3 = 10; 

data have; 
drop i; 
do i = 1 to 5; 
date = i; 
output; 
end; 
run; 

%macro test; 
data test; 
set have; 

%do i=1 %to 3; 
if date= &&vv&i then savinglight = 1; 
%end; 
run; 
%mend test; 

%test; 
관련 문제