BookmarkSubscribeRSS Feed
0 Likes

Hello!

 

Currently there is no way to pass hash object(s) in/out of PROC FCMP functions.Specifically, when calling functions/procedures from within a data step. This ability would help tremendously with code simplification and modularization. Current, workarounds involve passing arrays back and forth or running hash within proc fcmp and passing out strings/arrays etc.

 

Thank you for consideration.

 

Something like this would be desired:

 

/*hash definition or population from ds*/
function MY_HASH1() hash;

	   length name1 name2 $ 32;

		/*	   you can define structure/populate it manually or get it from ds*/
	   declare hash hashtopassout (dataset:"mylookup");
	   rc=hashtopassout.definedata("name1","name2");
	   rc=hashtopassout.definekey("id");
	   rc=hashtopassout.definedone();
	  
	  return(hashtopassout);

	endsub;

/*hash passing in out*/
/*this could also be call procedure*/
function PASS_HASH_INOUT(newid, newname $, hashobjectname hash) hash;

		declare hash hashobjectname;
		/*		define data, key or iterator should be anchored to incoming hash object hashobjectname*/

		/*		i.e. adding/recplacing newid & newname*/
		rc=hashobjectname.replace();
  
	  return(hashobjectname);

	endsub;

/*use in data step*/

data dout; set somedata;

		/*		declare function from function hash*/
		/*would allow modularization of all hash objects*/
		declare hash hashobjectindataset(MY_HASH1());
		declare hash hashobjectindataset2(MY_HASH1());
		
		/*		this could be also call procedure if this type of assignment would not work*/
		hashobjectindataset2 = PASS_HASH_INOUT('23', 'sasideas', hashobjectindataset);

run;