2015-02-02 3 views
-2

특정 경로 값이 변경 될 때마다 SAS 가이드를 통해 PROC LOOP를 통해 루프를 사용하여 증분 ID가있는 새 열을 만들려고합니다.SAS - 열 값이 변경되지 않는 동안 루프 수행

그냥 예를 들어 나는 이런 식으로 뭔가를 찾고 있어요 :

 
Date  | Name | Status | ID 
------------------------------------------ 
20150101 | Tiago | Single | 1 

20150102 | Tiago | Single | 1 

20150103 | Tiago | Married | 2 

20150104 | Tiago | Divorced | 3 

20150105 | Tiago | Divorced | 3 

20150106 | Tiago | Married | 4 

를이 경우, 새로운 열이 증가 할 ID 될 것입니다 때마다 기록을 따라 상태가 변경됩니다. 이것으로 나는 이름으로 그룹화 할 수 있으며, 반복되는 경우에도 시간에 일어난 모든 변화를 볼 수 있습니다.

+2

http://www.ats.ucla.edu/stat/sas/faq/enumerate.htm – Reeza

답변

0

Dajun의 답변을 확장하여 이름으로 그룹화 할 수 있습니다.

/* Sort so that name forms groups and id will go in date order */ 
proc sort data = test; 
    by name date; 
run; 

data want; 
    set test; 
    /* Tell SAS we want to know when the value of name or status changes */ 
    by name status notsorted; 
    /* Reset the ID for each group */ 
    if first.name then id = 0; 
    /* iterate the ID as per DaJun */ 
    if first.status then id + 1; 
run; 
+0

이것은 정확히 내가 무엇을 찾고 있었는지! @SRSwift에 도움을 주셔서 감사합니다. – Ti4gO

2

이 질문은 약간 혼란스러워 보입니다. 제공된 샘플 데이터를 사용하여 원본 데이터가 이미 정렬 된 경우 이와 같은 데이터 단계가 수행 할 수 있습니다.

data new; 
    set test; 
    by status notsorted; 
    if first.status then id + 1; 
run; 

notsorted 옵션은 원본 데이터를 유지하는 데 사용됩니다. first.status는 상태가 처음 나타나는 경우 True입니다. id + 1은 요약문입니다. 요약 문의 변수는 누락 된 것으로 초기화되지 않습니다.

그런데 PROC LOOP이란 무엇입니까?

+0

흠, 영업 이익의 설명에 따라, 당신은 당신의'by' 문 이름 날짜 '로 할 수 있습니다 상태 '. 정렬에는이 순서가 필요합니다. –

+0

@DaJunTian 빠른 답변을 주셔서 감사합니다.하지만 Robert는 "그룹"이름 만 누락했다고 말했습니다. 고마움과 질문에 혼란에 대한 사과, 나는 회의 도중 게시물을 만들었습니다 ... 그리고 PROC 루프는 아무것도 롤, 나는 PROC SQL을 말하려고했는데 ... – Ti4gO

관련 문제