Hi, So I wrote a simulation program in proc IML. It works fine when the number of reps are low. However, when I run the full program, it crashes on me and I get this error message eventually: ERROR: Permanent copy of file WORK.DAT.DATA was deleted. ERROR: Cannot create data set WORK.DAT. [Permanent copy of file WORK.DAT.DATA was deleted.] I am guessing I am reading and writing the work.dat file too many times? Any help would be appreciated. I pasted the program below (sorry a lot of the beginning is a really makeshift way of changing the seed for each condition - if anyone knows a more elegant way to change the seed for each condition and have it be a known value - I would appreciate info on that too! ). PROC IML; path = 'C:\'; *Specify the number of observations and simulate the data; probmiss = .2; rando = 352930; nreps = 2000; do lpath = 1 to 3; do apath = 1 to 4; do bpath = 1 to 4; do samp = 1 to 4; if lpath = 1 then lambda = .4; if lpath = 2 then lambda = .6; if lpath = 3 then lambda = .8; if apath = 1 then alpha = 0; if apath = 2 then alpha = .1; if apath = 3 then alpha = .3; if apath = 4 then alpha = .5; if bpath = 1 then beta = 0; if bpath = 2 then beta = .1; if bpath = 3 then beta = .3; if bpath = 4 then beta = .5; if samp = 1 then nobs = 100; if samp = 2 then nobs = 200; if samp = 3 then nobs = 500; if samp = 4 then nobs = 1000; if lpath = 1 & apath = 1 & bpath = 1 & samp = 1 then seedcalc = rando+510; if lpath = 1 & apath = 1 & bpath = 2 & samp = 1 then seedcalc = rando+610; if lpath = 1 & apath = 1 & bpath = 3 & samp = 1 then seedcalc = rando+701; if lpath = 1 & apath = 1 & bpath = 4 & samp = 1 then seedcalc = rando+801; if lpath = 1 & apath = 2 & bpath = 1 & samp = 1 then seedcalc = rando+901; *** HERE I TRUNCATED ALL THE COMBOS FOR ILLUSTRATION PURPOSES - the actual program has every permutation written out ; PSIM = 1 - (alpha*alpha); PSIY = 1 - (beta*beta); LambdaE = 1 - (lambda*lambda); *LambdaX; LX = {1.00}; *LambdaY Matrix; LY = {1 0, 0 0, 0 0, 0 1.00}; LY[2,1] = lambda; LY[3,1] = lambda; *Gamma Matrix, First row is a path, Second row is c' path; GA = {0, 0}; GA [1,1] = alpha; *Phi Covariance Matrix; PH = {1}; *Psi Covariance Matrix; PS = {0 0.00, 0.00 0}; PS [1,1] = PSIM; PS [2,2] = PSIY; *Theta Delta Matrix; TD = {0}; *Theta Epsilon Matrix; TE = {0.00 0.00 0 0.00, 0.00 0 0.00 0, 0 0.00 0 0.00, 0.00 0 0.00 0}; TE [2,2] = LambdaE; TE [3,3] = LambdaE; *Beta Matrix, Second Row First Column is b path; B = {0.00 0.00, 0 0.00}; B[2,1] = Beta; *Identity Matrix; I = {1 0, 0 1}; COVY = LY*(INV(I-B))*(GA*PH*GA`+PS)*(INV(I-B`))*LY`+TE; COVX = LX*PH*LX` + TD; COVYX = LY*(INV(I-B))*GA*PH*LX`; COVXY = LX*PH*GA`*(INV(I-B`))*LY`; UPPER = COVX || COVXY; LOWER = COVYX || COVY; cov = UPPER // LOWER; *We set the mean vector to zero; means = j(5,1,0); *Specify the random number seed; call randseed(seedcalc); do iteration = 1 to nreps; *Draw sample from multivariate normal distribution; sampledata = randnormal(nobs,means,cov); *Make some values missing; missingindicator = j(nobs,1,.); call randgen(missingindicator,'Bernoulli',probmiss); sampledata[loc(missingindicator = 1),2] = -999; *Output data to SAS data set; create dat from sampledata[colname={X M1 M2 M3 Y}]; append from sampledata; close dat; *Create filename; file = path + "mplus_NOBS" + strip(char(nobs)) + "_MISS" + strip(char(probmiss))+ "_alpha" + strip(char(alpha))+ "_beta" + strip(char(beta))+ "_lambda" + strip(char(lambda)) + "_iter" + strip(char(iteration)) + ".dat"; *Output SAS data set to .dat file; submit file; data _null_; set dat; file "&file"; put x m1 m2 m3 y; run; endsubmit; end; end; end; end; end; quit;
... View more