Hi all,
proc sql;
create table umd
as select distinct a.permno, a.date, a.prc, exp(sum(log(1+b.ret)))-1 as cum_return
from crspmom6(keep=permno date) as a, crspmom6 as b
where a.permno=b.permno and 0<=intck('month', b.date, a.date)<&J
group by a.permno, a.date
having count(b.ret)=&J;
quit;
How to change red words to skip one month, that is, skip the month between time t and t-1?
The two uses of &J do not seem to be related. The first refers to a number of months, the second, to a number of records...
WHERE condition only: Remove the "=" sign from the condition to exclude the current month and add a "=" sign before &J to include the Jth month..
HAVING condition has no apparent relation with your question...
PG
Not 100% sure what you want, because the question isn't clear and how you're incrementing &J isn't presented.
0<=intck('month', b.date, a.date)<&J+1?
The two uses of &J do not seem to be related. The first refers to a number of months, the second, to a number of records...
WHERE condition only: Remove the "=" sign from the condition to exclude the current month and add a "=" sign before &J to include the Jth month..
HAVING condition has no apparent relation with your question...
PG
Thanks! It works.
In my case, '=' should not be added before &J, so in the HAVING condition, count should be &J-1
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.