 putHash.sas
 putHash.sas
/* Richard A. DeVenezia
 * www.devenezia.com
 * Feb 11, 2003
 *
 * Show the values of the data items of a DATA Step hash object in the log
 */
%macro putHash (hash, vars);
  %*
  %* hash - variable that references a hash object
  %* vars - space separated list of variables linked to the data items of hash
  %*        separate with pound sign (#) to get varname=varvalue format
  %*;
  %* generate a random variable name;
  %local random hi rc;
  %let random = %substr(%sysfunc(ranuni(0),10.8),3);
  %let hi = hi_&random;
  %let rc = rc_&random;
  %* emit DATA Step code that iterates the hash and
  %* puts the data items values in the log;
  declare hiter &hi ("&hash");
  do &rc = &hi..first() by 0 while (&rc = 0);
    put %sysfunc(translate(&vars,=,#));
    &rc = &hi..next();
  end;
  &hi..delete();
  put;
  %put WARNING: Values of variables &vars will change;
%mend; Sample code
data _null_;
  * prep the PDV, this lazy way is not always recommended;
  if 0 then set sashelp.class(obs=0);
  declare hash H (dataset:'sashelp.class');
  H.defineKey ('Name');
  H.defineData('Name', 'Age', 'Weight', 'Sex');
  H.defineDone();
  %putHash (H,name#age#weight#sex#);
  %putHash (H,name age weight sex);
  stop;
run;Name=John Age=12 Weight=99.5 Sex=M Name=Alice Age=13 Weight=84 Sex=F Name=Henry Age=14 Weight=102.5 Sex=M ... John 12 99.5 M Alice 13 84 F Henry 14 102.5 M ...