謝謝唷!
1. How may I create a new Column named HH which is a firm’s historical high price till yesterday? (every line we have a firm’s id PERMNO, date, close price) vice versa LL
2. How may I create a new Column named FLAG which is a firm’s price >HH, then classified into Max portfolio. vice versa Min
The remaining classified into third portfolio flagged COMPARISON
3. Because we will watch the monthly return after the stock is classified into Max or Min portfolio, so the same stock can not be reclassified into Max or Min within one month after it was classified into Max or Min. How may I be coding it?
DM'LOG; CLEAR; OUT; CLEAR; ODSRESULTS; CLEAR;';
%LET FOLDER=%STR(C:\USERS\SC\DESKTOP\HIGH);
LIBNAME HIGH "&FOLDER";
DATA HH;
SET HIGH.HH;
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=HHLL(DROP=SHRCD EXCHCD );
BY PERMNO DATE;
RUN;
DATA HHLL;
SET HH;
BY PERMNO DATE;
HH=MAX(ABS(PRC/CFACPR),HH);
LL=MIN(ABS(PRC/CFACPR),LL);
IF FIRST.PERMNO THEN HH = .;
IF FIRST.PERMNO THEN LL = .;
RETAIN HH LL;
RUN;
/*
DATA HHLL1;
SET HHLL;
WHERE DATE BETWEEN '01JAN1963'D and '31DEC2023'D;
RUN;
DATA FLAG;
SET HHLL1;
BY PERMNO;
RETAIN FLAG;
IF FIRST.PERMNO THEN FLAG = .;
IF DATE > INTNX('MONTH', FLAG, 1) THEN DO;
IF PRC > HH THEN FLAG = 'MAX';
ELSE IF PRC < LL THEN FLAG = 'MIN';
ELSE FLAG = 'COMPARISON';
RUN;
DATA MV;
SET FLAG;
FORMAT LAST_MONTH DATE9.;
LAST_MONTH = INTNX('MONTH', DATE, -1);
MV = ABS(PRC/CFACPR)*(SHROUT*CFACSHR);
RUN;
PROC RANK DATA=MV OUT=QUARTILE GROUPS=4;
BY PERMNO LAST_MONTH;
VAR MV;
RANKS SIZE_PERCENTILE;
RUN;
*/