06-15-2017 01:42 PM
I need to modify a program; originally, it is a very simple data step. Data want; Set old; Where rownum=3; Run; Now I need to add some new rules because of different ways of calculating the score, instead of just pick up the score on the third row before. I cannot pick the third row (one size does not fit all!). The rules are listed as follows 1. If id in (‘4’,’5’,’110’,’119,’1000’) then score=sum1/sum2; 2. If id in (‘34’,’12’,’245’,’beaa’,’geee2’) then score= sum(aver)/sumrownum: 3. If id in (‘rt’, ‘t32’,’g45’,’2’,’578’) then score = score where appears on the first row, that is rownum=1 4. If id in (‘a2’,’c34’) then score=score where appears on the second row, that is rownum=2; …. So I am thinking of doing this in a datastep, it would be easy for the first two steps, but for the last two, it seems that I need use “where…” and I do not know how to do. Or do I have to set up a subdataset? That will be time consuming Can anybody show me how to do? Thanks.
06-15-2017 01:56 PM
It takes a little work, but you can get the values in this way:
retain score1 score2;
****************** more statements to calculate SCORE
if rownum=1 then score1 = score;
else if rownum=2 then score2 = score;
drop score1 score2;
Now SCORE1 is the calculated SCORE value for ROWNUM=1, and presumably gets calculated before it is needed to generate SCORE values for later values of ROWNUM. Just use SCORE1 and SCORE2 as part of your SCORE calculations.