계수

2013-01-07 5 views
4

어쩌면 내가 세트 다음있어 바보 같은 질문 ... :계수

id count 
x 1 
y 2 
z 3 
a 1 
b 2 
c 3 
etc. 

그리고 난이 원하는 :

여기
id count group 
x 1 1 
y 2 1 
z 3 1 
a 1 2 
b 2 2 
c 3 2 
etc. 

내가 시도 할 것입니다 :

data macro_1; set vix.macro_spy; where macro=1; 
count+1; 
if count>3 then do; 
    count=1; 
end; 
    group=0; 
    if count=1 then group+1; 
    run; 

하지만 작동하지 않습니다. 한 번 '카운트 = 1'을 얻으면 '그룹'을 모두 하나씩 추가 할 수 있습니까? 감사합니다. .

답변

5

더 간단

data want; 
set vix.macro_spy; 
group+(count=1); 
run; 
+0

좋은 답변입니다. 고마워. 머리 좀 더 설명해 주시겠습니까? –

+3

그것은 count = 1을 true/false로 평가합니다. 이것은 SAS가 값 1/0을 취합니다. 따라서 count = 1이면 그룹 값에 1을 더하고 그렇지 않으면 0을 더합니다. var + ... 형식으로 변수를 만들 때 이전 값은 자동으로 유지됩니다. var = var + ...를 넣으면 명시 적 retain 문을 지정해야합니다. 희망이 도움이됩니다. – Longfish

+0

@Keith +1; 나는 당신의 답을 수정하여 당신의 요점을 강조했습니다. – BellevueBob

0

내가 필요한 것을 이해하지 못했습니다. 따라서 변수의 값이 count이되도록 항상 1, 2, 3, 1, 2, 3, 1, 2, 3... 이되도록 데이터 집합을 정렬했습니다. 변수 이 3을 넘어갈 때마다 값이 증가하도록 변수 group을 생성 하시겠습니까?

data group; 
    set vix.macro_spy; 
    retain group; 
    if _N_ = 1 then group = 0; 
    if count = 1 then group + 1; 
run; 

이 내가 사용하고 일반적인 패턴은 다음과 같습니다

그렇다면, 당신이 뭔가를 할 수 있습니다. if _N_ = 1 부분은 한 번만 실행됩니다. 여기서 변수를 초기화합니다.

retain 문은 변수가 DATA 단계의 한 반복에서 그 값을 유지하도록합니다.

+0

들으, 또한 작동하지만 @Keith 하나가 더 간단처럼 보인다. –