标题: SAS9 Hash Object Tip [打印本页] 作者: shiyiming 时间: 2006-3-23 10:39 标题: SAS9 Hash Object Tip Load and Find
[code:5fbf1]/* Create Input Data Set */
data names;
length first last title $ 16;
length born died 8;
input first last born died title & $16.;
datalines;
William Blake 1757 1827 Spring
John Keats 1795 1821 To Autumn
Mary Shelley 1797 1851 Frankenstein
;
/* Load and Find */
data _null_;
length first last title $ 16;
length born died 8;
declare hash ht(dataset:"names");
ht.defineKey("first", "last");
ht.defineData("born","died","title");
ht.defineDone();
/* Find John Keats */
first = "John";
last = "Keats";
rc = ht.find();
if rc = 0 then
put "Found " first last title $QUOTE.;
else
put "Not Found " first last;
run;[/code:5fbf1]
[quote:5fbf1]Output:
Found John Keats "To Autumn"[/quote:5fbf1]Sorted Output
[code:5fbf1]/* Add to hash and then output */
data _null_;
length patient_id $ 16 discharge 8;
if _N_ = 1 then do;
declare hash ht(ordered:"a");
ht.defineKey("patient_id");
ht.defineData("patient_id","discharge");
ht.defineDone();
end;
infile datalines eof=output;
input patient_id discharge:DATE9.;
ht.add();
/*
ht.add() same as:
ht.add(key:patient_id,
data:patient_id,
data:discharge);
*/
return;
output:
ht.output(dataset:"sorted_ids");
datalines;
Smith-4123 15MAR2004
Hagen-2834 23APR2004
Smith-2437 15JAN2004
Flinn-2940 12FEB2004
;
data _null_;
set sorted_ids;
put patient_id discharge:DATE9.;
run;[/code:5fbf1]
[quote:5fbf1]Output:
Flinn-2940 12FEB2004
Hagen-2834 23APR2004
Smith-2437 15JAN2004
Smith-4123 15MAR2004[/quote:5fbf1]
Hash Iterator
[code:5fbf1]/* Create Input Data Set */
data patients;
length patient_id $ 16 discharge 8;
input patient_id discharge:DATE9.;
datalines;
Smith-4123 15MAR2004
Hagen-2834 23APR2004
Smith-2437 15JAN2004
Flinn-2940 12FEB2004
;
/* Load and iterate over hash */
data _null_;
length patient_id $ 16 discharge 8;
declare hash ht(dataset:"patients",ordered:"ascending");
ht.defineKey("patient_id");
ht.defineData("patient_id","discharge");
ht.defineDone();
declare hiter iter("ht");
rc = iter.first();
do while (rc=0);
put patient_id discharge:DATE9.;
rc = iter.next();
end;
run;[/code:5fbf1]
[quote:5fbf1]Output:
Flinn-2940 12FEB2004
Hagen-2834 23APR2004
Smith-2437 15JAN2004
Smith-4123 15MAR2004[/quote:5fbf1]