Skip to content

Instantly share code, notes, and snippets.

@MJacobs1985
Last active September 29, 2021 19:54
Show Gist options
  • Save MJacobs1985/6915f9b2c6a7427d828b313880029492 to your computer and use it in GitHub Desktop.
Save MJacobs1985/6915f9b2c6a7427d828b313880029492 to your computer and use it in GitHub Desktop.
Simulations in SAS
%let SigmaBlock=2520.38;
%let block=11;
%let treat=9;
%let time=2;
%let isim=200;
proc iml;
/* Create dataset */
create WIDEAMEN var {"ISIM" "Block" "RndBlock" "Time" "T1" "T2" "T3" "T4" "T5" "T6" "T7" "T8" "T9"};
call randseed(4321);
/* Create # simulations of correlated data for 9 Treatments & Two Timepoints */
do i=1 to &isim;
MeanT1={2805 2945};
MeanT2={2855 3050};
MeanT3={2865 3060 };
MeanT4={2870 3080};
MeanT5={2858 3045};
MeanT6={2855 3055};
MeanT7={2860 3060};
MeanT8={2830 2975};
MeanT9={2850 2990};
/*Cov={16158 2965.75,
2965.75 8175.16};*/
Cov={15059 2496.71,
2496.71 8308.56};
T1=RandNormal(&block, MeanT1, Cov); /* Also need to see and try RandMVT to simulate from random T distribution */
T2=RandNormal(&block, MeanT2, Cov);
T3=RandNormal(&block, MeanT3, Cov);
T4=RandNormal(&block, MeanT4, Cov);
T5=RandNormal(&block, MeanT5, Cov);
T6=RandNormal(&block, MeanT6, Cov);
T7=RandNormal(&block, MeanT7, Cov);
T8=RandNormal(&block, MeanT8, Cov);
T9=RandNormal(&block, MeanT9, Cov);
/* Create Random Block Effect */
rndBlock = j(&block,1);
call randgen(rndBlock, "Normal", 0, sqrt(&SigmaBlock));
rndBlock=colvec(repeat((rndBlock),1,2));
/* Create Identifiers --> Identifier for Time will flow from PROC TRANSPOSE */
Block=colvec(repeat(T(1:&block),1,2));
Time=repeat(T(1:2),&block,1);
ID=1:&block*&time;
ISIM=repeat(i,&block*&time,1);
append;/* the append statement nicely collects all the created variables and puts them in one dataset */
end;
close WIDEAMEN;
/* Manual implementation */
data WIDEAMEN(drop=rndBlock);
set WIDEAMEN;
T1=T1+rndBlock;
T2=T2+rndBlock;
T3=T3+rndBlock;
T4=T4+rndBlock;
T5=T5+rndBlock;
T6=T6+rndBlock;
T7=T7+rndBlock;
T8=T8+rndBlock;
T9=T9+rndBlock;
run;
proc sort data=WIDEAMEN;by ISIM;run;
/* Create LONG formatted data from WIDE formatted data */
proc transpose data=WIDEAMEN out=LONGAMEN(rename=(COL1=AMENDigest _NAME_=Treat));
by ISIM Block Time;run;
/* Sort data to enable analysis via PROC MIXED */
proc sort data=LONGAMEN;by ISIM Treat Time block;run;
/* Visualize */
proc sgplot data=longamen;
where isim=1;
reg x=Time y=AMENDigest / group=block;
run;
proc sgscatter data=WORK.WIDEAMEN;
where isim=1;
title "Scatterplot Matrix for Simulated Data";
matrix T1 T2 T3 T4 T5 T6 T7 T8 T9 / group=time diagonal=(histogram normal);
run;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment