Last active
September 29, 2021 19:54
-
-
Save MJacobs1985/6915f9b2c6a7427d828b313880029492 to your computer and use it in GitHub Desktop.
Simulations in SAS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%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