turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- SAS Programming
- /
- Base SAS Programming
- /
- a mixture of many ways to calculating

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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.
```

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to wenling

06-15-2017 01:47 PM

1. Post sample data

2. Post sample expected output

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to wenling

06-15-2017 01:56 PM

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;

run;

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.