41 %local state digest pair numtext normal i chars nums;
42 %let state=%mf_getuniquename(prefix=_____state_);
43 %let digest=%mf_getuniquename(prefix=_____digest_);
44 %let pair=%mf_getuniquename(prefix=_____pair_);
45 %let numtext=%mf_getuniquename(prefix=_____numtext_);
46 %let normal=%mf_getuniquename(prefix=_____normal_);
47 %let i=%mf_getuniquename(prefix=_____i_);
48 %let chars=%mf_getuniquename(prefix=_____chars_);
49 %let nums=%mf_getuniquename(prefix=_____nums_);
56 if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);
57 drop &state &digest &pair &numtext &normal &i;
60 &state = md5(
'DC HASH v2');
62 %
if %length(&cvars)>0 %then %
do;
63 array &chars{*} $ &cvars;
64 do &i = 1 to dim(&chars);
66 &digest = md5(trimn(&chars[&i]));
67 substr(&pair, 1, 16) = &state;
68 substr(&pair, 17, 16) = &digest;
73 %
if %length(&nvars)>0 %then %
do;
74 array &nums{*} &nvars;
75 do &i = 1 to dim(&nums);
81 if missing(&nums[&i]) then &normal = &nums[&i];
82 else &normal = &nums[&i] * 1;
83 &numtext = put(&normal, binary64.);
84 &digest = md5(trim(&numtext));
85 substr(&pair, 1, 16) = &state;
86 substr(&pair, 17, 16) = &digest;
91 &md5_col = put(&state, $hex32.);