- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I have the following dataset
student_id
1
2
3
4
1
2
3
1
2
I need the output as
student_id seq_num
1 1
2 2
3 3
4 4
1 1
2 2
3 3
1 1
2 2
3 3
1 1
2 2
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Not sure what your question here is. You have one variable and need to create another variable which is exactly the same as the variable you have? Maybe your required output is not correct, and you need the sequence within each by group? If so:
data want; set have; do seq_num=1 to 4; output; end; run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I think what you really want is to track the order in which id's first appear, yes? I.e.if you have
id
AAA
A21
BBB
CCC
A21
BBB
AAA
...
then do you wnat id=AAA seq=1, id=A21 seq=2, id=BBB seq=3, id=CCC seq=4.
If so then this would work:
data want (drop=rc);
set have;
if _n_=1 then do;
declare hash id_lookup();
id_lookup.definekey('id');
id_lookup.definedata('seq');
id_lookup.definedone();
end;
rc=id_lookup.find();
if rc^=0 then do;
seq=id_lookup.num_items+1;
rc=id_lookup.add();
end;
run;
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Here's an idea:
data want;
set have;
seq_num + 1;
if student_id < lag(student_id) then seq_num=1;
run;
It's not 100% clear when to start the SEQ_NUM values over again, but this might be sufficient.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I think the OP wants to set up a lookup table, in which each ID is assigned a unique sequence number, with this additional propert: the sequence number will rank the order of first appearance of the ID.
MK
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------