DATA Step, Macro, Functions and more

a mixture of many ways to calculating

Super Contributor
Posts: 336

a mixture of many ways to calculating

I need to modify a program; originally, it is a very simple data step.

Data want;
Set old;
Where rownum=3;

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.

Super User
Posts: 17,912

Re: a mixture of many ways to calculating

1. Post sample data

2. Post sample expected output


Super User
Posts: 5,093

Re: a mixture of many ways to calculating

It takes a little work, but you can get the values in this way:


data want;

set old;

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.

Ask a Question
Discussion stats
  • 2 replies
  • 3 in conversation