2017-02-16 3 views
0

데이터는 아래 그림과 같습니다. 나는 데이트, 고객 이름, 그들이 구입 한 과일의 다른 카테고리를 가지고있다. 는 "판매 두 배"얼마나 많은 계산 새 열을 생성에SAS : 다른 행에서 SAS 체크 항목을 사용할 수 있습니까?

Example

내가 원하는 발생했습니다. 예를 들어 고객 A와의 첫 번째 상호 작용이 1/15이고, 두 번째 상호 작용이 첫 상호 작용 후 7 일 이내 인 경우 과일을 판매 할 때 "이중 판매"열에 1을 입력해야합니다.

본질적으로 SAS가 고객 ID와 일치하도록하려면 행을으로 이동하고 첫 번째 날짜로부터 7 일 이내에있는 날짜를 찾으십시오.

+0

: 어떤 경우에, 당신은 간단한 논리를 사용하여 비교를 만들기 위해 ID date을 기준으로 정렬 한 후 ID에 의해 DATE을 지연 할거야? '데이터 라인'자체를 프로그래밍하지 않고도 다른 사람들이 사용할 수있는 샘플 데이터 용 코드를 추가하면 다른 사람들에게 도움이 될 것입니다. 또한 왜'sql'과'mysql' 태그를 사용합니까? 솔루션에 이러한 솔루션이 필요합니까? – Snorex

+0

코멘트 주셔서 감사합니다, 나는 데이터를 분해하고 동일한 ID를 가진 모든 날짜를 같은 행에 옮겨 보았습니다. 그래서 행을 확인할 때 대/소문자를 사용할 수는 있지만 성공하지 못했습니다. A의 수는 B의 수와 동일하지 않습니다. –

답변

0

질문 : ID=CDOUBLE_SOLD=1이있는 이유는 무엇입니까? 비교할 다른 ID=C은 없습니다. 당신이 지금까지 시도 무엇

proc sort data = have; 
    by ID DATE; 
run; 

** edit sales to 1/0 **; 
data have1; set have; 
    array a(3) APPLE ORANGE PEAR; 
    do i=1 to dim(a); 
     if a(i)>0 then a(i)=1; 
    end; 
    drop i; 
run; 

data want; set have1; 
    by ID; 
    LAG_DATE=lag(DATE); 
     if first.ID then LAG_DATE = .; 
     if LAG_DATE ne . then do; 
      if (DATE-LAG_DATE)<=7 and sum(APPLE,ORANGE,PEAR)>0 then DOUBLE_SOLD=1; 
       else if (DATE-LAG_DATE)>7 or sum(APPLE,ORANGE,PEAR)=0 then DOUBLE_SOLD=0; 
     end; 
     else do; 
      if sum(APPLE,ORANGE,PEAR)>1 then DOUBLE_SOLD=1; 
       else DOUBLE_SOLD=0; 
     end; 
    format LAG_DATE mmddyy10.; 
run; 
+0

ID가 동일하지만 7 일 이상 'DOUBLE_SOLD = 0'인 조건을 추가하기 위해 편집 됨 – Foxer

+0

ID = C는 apple과 pear를 판매했기 때문에 이중 판매되었습니다. 나는 이미 그것을위한 해결책을 가지고 있기 때문에, 원래의 성명서에서 명확히하지 않았지만 같은 날 과일이 1 개 이상 판매된다면 이중 판매 = 1로 설정하기를 원합니다. –

+0

이제 판매액> 1을 1과 동일하게 만드는 단계를 추가하여 합계가 판매되는 과일 수를 계산합니다. 그것이 당신을 위해 어떻게 작동하는지보십시오. – Foxer