/****************************************** input parameters: indata - input data set. Outdata - output data (mean and std err.) var - analysis variable on input data set. wt - variable name on input data for full sample weights. Repwt - prefix used in replicate weight names. Replicate weight names must be in the form: repwt01, repwt02, ... repwt45 n - number of replicate weights on input data set. Program creates an output dataset containing the method, the number of replicates, the mean, and the standard error. ********************************************************/ %macro jack2_mean(indata,outdata,var,wt,repwt,n); proc means data=&indata noprint;* get sum of wts; var &wt; output out=sumwtsall sum=&wt; run; proc means data=&indata noprint; var &var; weight &wt; output out=rep_mean_junk2 mean=mean; run; %do i=1 %to &n; ** cycle through the replicate weights **; %put calculating results for replicate weight &i; proc means data=&indata noprint; var &var; weight &repwt&i; output out=rep_mean_junk mean=mean; run; data rep_mean_junk2; set rep_mean_junk2 rep_mean_junk(in=j); if j then rep=&i; run; %end; %mend; data rep_mean_junk2; set rep_mean_junk2; if _N_=1 then allmean=mean; retain allmean; if _n_=1 then delete; run; proc means data=rep_mean_junk2 noprint; var sum; output out=&outdata mean=mean var=var; run; data &outdata; set &outdata(keep=mean var); _METHOD_ = "JK2"; _REPLICATES_=&n; &var._mean = mean; &var._std = sqrt(var*(&n-1)*(&n-1)/&n); *drop mean var; run; proc print; run; %mend jack2_mean; %jack2_mean(ex1.ex1repwts,res,hhinc,newweight,newweight,320); /****************************************** input parameters: indata - input data set. Outdata - output data (mean and std err.) var - analysis variable on input data set. wt - variable name on input data for full sample weights. Repwt - prefix used in replicate weight names. Replicate weight names must be in the form: repwt01, repwt02, ... repwt45 n - number of replicate weights on input data set. Program creates an output dataset containing the method, the number of replicates, the mean, and the standard error. ********************************************************/ %macro jack2_mean(indata,outdata,var,wt,repwt,n); data rep_mean_junk2; set _null_; run; *create dummy data set*; proc means data=&indata noprint; var &var; weight &wt; output out=meanhat mean=meanhat; run; %do i=1 %to &n; ** cycle through the replicate weights **; %put calculating results for replicate weight &i; proc means data=&indata noprint; var &var; %if &i<=9 %then %do; weight &repwt.0&i; %end; %if &i>9 %then %do; weight &repwt.&i; %end; output out=rep_mean_junk mean=mean; run; data rep_mean_junk2; set rep_mean_junk2 rep_mean_junk(in=j); if j then rep=&i; run; %end; data rep_mean_junk2; merge rep_mean_junk2 meanhat; by _type_; mean2=(mean-meanhat)*(mean-meanhat); run; proc means data=rep_mean_junk2 noprint; var mean2; id meanhat; output out=&outdata sum=sum; run; data &outdata; set &outdata(keep=sum meanhat); _METHOD_ = "JK2"; _REPLICATES_=&n; &var._mean = meanhat; &var._std = sqrt(sum);; drop sum meanhat; run; options notes; %mend jack2_mean; %jack2_mean(all,calc_mean ,calcium,wt4_day1,r4_d1_,43); We use