thx!! DM'LOG; CLEAR; OUT; CLEAR; ODSRESULTS; CLEAR;'; %LET FOLDER=%STR(C:\USERS\ALAIN\ONEDRIVE\桌面\HIGH); LIBNAME HIGH "&FOLDER"; DATA HH; SET HIGH.HH; IF CFACPR=0 THEN DELETE; RUN; PROC SORT DATA=HH (KEEP =SHRCD EXCHCD PERMNO DATE PRC CFACPR SHROUT CFACSHR WHERE =( SHRCD IN (10,11) AND EXCHCD IN (1,2,3,31,32,33) ) ) OUT=HL(DROP=SHRCD EXCHCD ); BY PERMNO DATE; RUN; DATA HL; SET HL; BY PERMNO DATE; RETAIN H L 0; P=ABS(DIVIDE (PRC, CFACPR)); IF FIRST.PERMNO THEN H = P; IF FIRST.PERMNO THEN L = P; H = MAX(H, P); L = MIN(L, P); DROP PRC CFACPR; RUN; /* PERMNO DATE SHROUT CFACSHR H L P */ DATA MK (DROP=_:); SET HL; BY PERMNO; RETAIN _FIRST_DATE_QUALIFIED . _H . _H_DATE . _L . _L_DATE . PORTFOLIO $11. ; IF FIRST.PERMNO THEN DO; CALL MISSING(OF _:); _FIRST_DATE_QUALIFIED=INTNX('YEAR', DATE, 1, 'SAME')+1; PORTFOLIO = ' '; END; IF _H=. THEN _H=P; IF _L=. THEN _L=P; IF P ^=. THEN DO; IF P > _H AND NOT (PORTFOLIO='MAX' AND DATE < INTNX('MONTH', _H_DATE, 1, 'SAME')) THEN DO; _H=P; _H_DATE=DATE; PORTFOLIO='MAX'; END; ELSE IF P < _L AND NOT (PORTFOLIO='MIN' AND DATE < INTNX('MONTH', _L_DATE, 1, 'SAME')) THEN DO; _L=P; _L_DATE=DATE; PORTFOLIO='MIN'; END; END; IF DATE >= _FIRST_DATE_QUALIFIED THEN DO; H=_H; H_DATE=_H_DATE; L=_L; L_DATE=_L_DATE; IF PORTFOLIO=' ' THEN PORTFOLIO='COMPARISON'; END; ELSE PORTFOLIO='UNQUALIFIED'; FORMAT H_DATE L_DATE YYMMDD10. ; RUN; DATA MK; SET MK(OBS=2000); PUT (_ALL_) (+0); RUN;
... View more