이 같은 테이블에 상황을 가지고 :선택 롤링 개월 데이터
이 같은 출력 데이터의 3 롤링 개월을 선택하고 싶어 할Month Product Score Visit_ID
1 A 2 113
1 B 3 114
2 A 4 115
3 C 5 116
3 D 6 118
4 E 7 119
:
Month Product Score Visit_ID
3 A 2 113
3 B 3 114
3 A 4 115
3 C 5 116
3 D 6 118
4 A 4 115
4 C 5 116
4 D 6 118
4 E 7 119
나는이 작업을 수행하는 방법을 알고 첫 롤링 3 개월 동안, 여러 롤링 3 개월 동안 동일한 작업 수행 방법.
%macro Rolling_months(Initial_dataset=,Final_dataset=,mon_no=,rollmon_field=);
PROC SORT DATA=&Initial_dataset.;BY &DATERG;RUN;
DATA &Initial_dataset.1;
SET &Initial_dataset.;
BY &DATERG;
RETAIN CNT1 0;
IF FIRST.&DATERG THEN CNT1+1;
CALL SYMPUT('ROLL',CNT1);
RUN;
%put &roll;
PROC SORT DATA=&Initial_dataset.1 OUT=CAL(KEEP=&DATERG CNT1) NODUPKEY;BY &DATERG CNT1;RUN;
DATA TEMP(KEEP=X R);
st=&mon_no.;
st1=%eval(&mon_no.-1);
DO X=ST TO &roll.;
n=0; r=0;
do n = 0 to st1;
R=X-n;
OUTPUT TEMP;
end;
END;
RUN;
data roll(rename=(&daterg=rolling_months));
merge temp(in=a rename=(x=CNT1)) cal(in=b);
by CNT1;
if a and b;
run;
PROC SORT DATA=&Initial_dataset.1;BY CNT1;RUN;
proc sql;
create table &Final_dataset. AS
(select
A.*,
B.*
FROM &Initial_dataset.1 A RIGHT JOIN ROLL B
ON A.CNT1=B.R
);
quit;
테이블에 키가있는 것이 좋습니다. –
MySQL 또는 SAS/Proc Sql에서이 작업을 수행하고 있습니까, 아니면 신경 쓰지 않습니까? 첫 롤링 3 개월 동안 어떻게했는지 게시하십시오. – Joe
데이터베이스는 MySQL이고 SAS/Proc Sql에서 사용합니다. 단 3 개월 동안 데이터를 작성하기 위해 다른 변수를 작성하고 마지막 달 값을 할당했습니다. –