BookmarkSubscribeRSS Feed
jeka12386
Calcite | Level 5

Dear all,

I am new to SAS/IML studio and I am struggling to append data generated from R to SAS. Basically the program below which compute the power of Internal Pilot Study (pls see also attached file ) has been written in R but I need my output  to be saved as a SAS  dataset  somewhere in my personal files directory ( "C:/Users/Jeka Abi/Documents/Results") so that I can do further analysis in SAS. I was wondering if you would be able to help me with SAS code at the end of my program to perform this. I have used these two SAS codes  (run ImportMatrixFromR(Rejec, "results"); print Rejec;) ) but they just print the results from R but they do not save  them as  a DATASET as I want.


submit / R;

library(lattice)

library(ldbounds)

library(mvtnorm)

sen <- function(n,stages,rho,s1,s2,diff){

### variance covariance for look1 ##

  sigma <- kronecker(matrix(1,nrow=1,ncol=1),matrix(c(1,rho,rho,1),nrow=2,ncol=2))

### variance covariance for look2 ###

  sigma2 <- kronecker(matrix(1,nrow=2,ncol=2),matrix(c(1,rho,rho,1),nrow=2,ncol=2))

#### Noncentrality parameter for look 1 ####

  mean11 <- sqrt((n*diff^2)/(s1*2))

  mean21 <- sqrt((n*diff^2)/(s2*2))

#### Noncentrality parameter for look 2 ####

  mean12 <- sqrt(2*(n*diff^2)/(s1*2))

  mean22 <- sqrt(2*(n*diff^2)/(s2*2))

# end loop

###DEFINING FUCNTION####

out <- pmvnorm(lower=c(-Inf,-Inf),upper=c(Inf,Inf),c(mean11,mean21), corr=sigma)-pmvnorm(lower=c(-Inf,-Inf,-Inf,-Inf),upper=c(Inf,Inf,2.25,2.25),c(mean11,mean21,mean12,mean22), corr=sigma2)-0.8

out

}

  rho <- 0.5

  s1 <- 1

  s2 <- 1

  diff <- 0.5

  stages <- 2

  mu1 <- matrix(c(diff,diff),nrow=1,ncol=2)

  mu0 <- matrix(c(0,0),nrow=1,ncol=2)

  # compute boundaries

  obf.bd1 <- bounds(c(1/2,2/2),iuse=1,alpha=0.0125)

  boundary <- obf.bd1$upper.bounds

n1 <- floor(uniroot(sen,lower=1,upper=100,stages=stages,rho=rho,diff=diff,s1=s1,s2=s2)$root)

# simulation set-up

  nsim <- 10

  set.seed(1)

  results <- matrix(NA,nrow=nsim,ncol=11)

  colnames(results) <- c("Gesrho", "GesS1", "GesS2", "n1", "Trurho", "Estrho", "EstS1", "EstS2", "TotalN",  "efficacy", "futility")                                                                                  

N <- vector(length=nsim)

# run simulations

for (i in 1:nsim){

  results[i,1] <- rep(rho)

  results[i,2] <- rep(s1)

  results[i,3] <- rep(s2)

  results[i,4] <- rep(2*n1)

# initiate

istop <- 0

# simulate sample of size n1

  Trurho <- 0.3

  results[i,5] <- rep(Trurho)

  nsigma <- matrix(c(1,Trurho,Trurho,1),ncol=2,nrow=2)

  Tsample <- rmvnorm(n1,c(0,0),nsigma)

  Csample <- rmvnorm(n1,mu0,nsigma)

  nrho <- cor(c(Tsample[,1],Csample[,1]),c(Tsample[,2],Csample[,2]))

  results[i,6] <- nrho

  s11 <- sqrt(var(c(Tsample[,1],Csample[,1])))

  results[i,7] <- s11

  s22 <- sqrt(var(c(Tsample[,2],Csample[,2])))

  results[i,8] <- s22

n2 <- round(uniroot(sen,lower=1,upper=100,stages=stages,rho=nrho,diff=diff,s1=s11,s2=s22)$root)

N <- stages*n2

results[i,9] <- N

if (istop==0) {

if (n1>=N) {istop <- 1}

else {

# simulate sample of size N2-n1

  Tsamplev <- rmvnorm(N-n1,c(0,0),nsigma)

  Csamplev <- rmvnorm(N-n1,mu0,nsigma)

}

 

Tsample <- rbind(Tsample,Tsamplev)

Csample <- rbind(Csample,Csamplev)

# test statistics

z1 <- (mean(Tsample[,1])-mean(Csample[,1]))/sqrt(2/N)

z2 <- (mean(Tsample[,2])-mean(Csample[,2]))/sqrt(2/N)

efficacy <- as.numeric(z1>=(boundary[2]) | z2>=(boundary[2]))

results[i,10] <- efficacy

futility <- as.numeric(z1<(-boundary[2]) & z2<(-boundary[2]))

results[i,11] <- futility

if(results[i,10]==1 | results[i,11]==1){istop <- 1}

}# end if

} # end simulation

endsubmit;

run ImportMatrixFromR(Rejec, "results");

print Rejec;

4 REPLIES 4
Rick_SAS
SAS Super FREQ

If you want a SAS data set, use

run ImportDatasetFromR("Work.MyData", "results");

See

http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect15...

jeka12386
Calcite | Level 5

Many Thanks Rick

I have the following results but I do not see where the dataset itself is saved??

DATASET : WORK.MYDATA.DATA

VARIABLE                          TYPE  SIZE

--------------------------------  ----  ----

Gesrho                            num      8

GesS1                             num      8

GesS2                             num      8

n1                                num      8

Trurho                            num      8

Estrho                            num      8

EstS1                             num      8

EstS2                             num      8

TotalN                            num      8

efficacy                          num      8

futility                          num      8

Number of Variables   : 11

Number of Observations: 10

manojinpec
Obsidian | Level 7

it must have been saved in work directory.

Rick_SAS
SAS Super FREQ

Yes. If you want it saved elsewhere, use the LIBNAME statement to define the directory:

libname MyDir "C:/My SAS Files/....";

run ImportDatasetFromR("MyDir.MyResults", "results");

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 4 replies
  • 1041 views
  • 0 likes
  • 3 in conversation