Starting from SAS 9.3, we can use hashing technique in PROC FCMP. In this way, we can lookup table using function. Below is the sample code:
* Scenario: Replace PROD_HIER_SK with PROD_ID.;
proc fcmp outlib=work.funcs.prod;
function prod_id(in_prod_hier_sk) $ 200;
length prod_id $ 200;
/* executable for only once */
declare hash h(dataset:"di_dm.product_dm");
rc = h.definekey("prod_hier_sk");
rc = h.definedata("prod_id");
rc = h.definedone();
/* look up first and return if found */
call missing(prod_id);
prod_hier_sk = in_prod_hier_sk;
rc = h.find();
return(prod_id);
endsub;
run;
options cmplib=(work.funcs);
data sample_fcmp_hashing (keep=prod_hier_sk prod_id parent_prod_hier_sk parent_prod_id);
set di_dm.product_hier_assoc_dm;
prod_id = prod_id(prod_hier_sk);
parent_prod_id = prod_id(parent_prod_hier_sk);
run;
Reference:
Andrew Henrick, Donald Erdman, and Stacey Christian. 2013. “Hashing in PROC FCMP to Enhance Your Productivity”, Proceedings of the SAS Global Forum 2013 Conference
Sample 47224: Load a SAS data set into a Hash Object using PROC FCMP
BTW, interestingly, you can find more information from SAS paper than from SAS Help doc.
As an experienced SAS programmer, I always keep an eye on SAS Global Forum.
No comments:
Post a Comment