- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
need to incorporate 'NODUPKEY' in hash short as in proc sort nodupkey. Any examples?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
data have;
input id var @@;
cards;
1 2 1 3 10 6 4 5 10 7 8 2
;
data _null_;
if _n_=1 then do;
dcl hash h( ordered: 'a');
h.definekey('id');
h.definedata('id','var');
h.definedone();
end;
do until (done);
set have end=done;
_rc=h.add();
end;
h.output(dataset:'want');
stop;
run;
Regards,
Haikuo
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The hash object by default drops duplicate keys. This is controlled by the duplicate option which tells SAS whether to replace or error when a duplicate key is encountered (when loading a dataset into a hash using the dataset option). To avoid this use the multidata:'y' option in the declare statement.
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002576871.htm
Check out the post by MikeZdeb in the link for a great list of reference papers for learning about Hash objects in SAS:
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Reminded by FriedEgg's comments "The hash object by default drops duplicate keys.", add() method is not needed for this purpose if choose to load the dataset once for all. However, if chose the last record when duplicating, replace() may still be needed:
data have;
input id var @@;
cards;
1 2 1 3 10 6 4 5 10 7 8 2
;
data _null_;
set have (obs=1);
dcl hash h( dataset: 'have', ordered: 'a');
h.definekey('id');
h.definedata('id','var');
h.definedone();
h.output(dataset:'want');
run;
This one feels better.
Regards,
Haikuo
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I may not have made myself clear enough:
keep the first incidence of key
dcl hash h(dataset:'have', ordered:'a');
keep the last incidence of key
dcl hash h(dataset:'have', ordered:'a' ,duplicate:'r');
keep all incidience of key
dcl hash h(dataset:'have', ordered:'a' ,multidata:'y');
fail if duplicates of key exist in loading file
dcl hash h(dataset:'have', ordered:'a' ,duplicate:'e');
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Learned and Agreed!