Hi,
I know it is not the most elegant solution but it seems to work :
data mydata_clean;
input SEX $ DOB PFI ZIP RACE;
datalines;
F 189804 125 10111 1
M 189802 126 12365 2
F 189801 129 12369 1
M 190111 256 14236 2
F 190302 101 12144 1
M 190307 115 12203 2
M 190307 115 12203 2
M 189806 356 18963 1
F 190308 258 14789 2
F 190302 101 12144 1
;
run;
%macro sqq(myvarn);
PROC SQL ;
CREATE TABLE SAMPLE2 AS
SELECT * FROM mydata_clean WHERE &myvarn. ="F";
QUIT;
%mend;
DATA _NULL_;
CALL EXECUTE('%nrstr(%sqq (sex ));');
RUN;
Hi guys,
Thank you very much for all your suggestions. I gave up on macro and instead went around the problem with early threshold. Ideally, i would have taken the intersect of data resulting from each program using 5 different blocking variables using macro.
data threshold; set similarity_score;
if score =>17 then output threshold; run;
But instead, I truncated data in data step as shown above using conservative value for cut-off that made following translink program doable to my RAM.
Below is macro that finally worked out, if someone would want to look at or use.
%macro blocking(myvar,data);
proc sql;
create table sel.&data as
select
a.obs_num as obs_num_1, b.obs_num as obs_num_2,
a.sex as sex_1, b.sex as sex_2,
a.birthy as birthy_1, b.birthy as birthy_2,
a.birthm as birthm_1, b.birthm as birthm_2,
a.zip as zip_1, b.zip as zip_2,
a.race as race_1, b.race as race_2,
a.ethnic as ethnic_1, b.ethnic as ethnic_2,
case when a.sex = b.sex then 1.0 else -8.0 end as sex_score,
case when a.birthy = b.birthy then 8.8 else -4.3 end as by_score,
case when a.birthm = b.birthm then 5.5 else -4.3 end as bm_score,
case when a.zip = b.zip then 8.7 else -4.3 end as zip_score,
case when a.race = b.race then 3.5 else -4.2 end as race_score,
case when a.ethnic = b.ethnic then 0.02 else -0.4 end as eth_score,
calculated sex_score + calculated by_score + calculated bm_score + calculated zip_score+ calculated race_score+ calculated eth_score
as score
from sel.ordata as a INNER JOIN sel.ordata as b
on a.obs_num > b.obs_num and a.&myvar=b.&myvar
where a.&myvar is not missing and calculated score ge 20;
;
quit;
%mend blocking;
%blocking(birthy,byblock1);
%blocking(birthm,bmblock1);
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.