Thursday, August 13, 2009

Example 7.10: Get data from R into SAS

In our previous entry, we described how to generate a dataset from SAS that could be used for analyses in R. Alternatively, someone primarily using R might want to test the new ”statistical graphics” procedures available starting with SAS 9.2. Here we show how one might create a long data set in R, export it, read it in SAS, and generate a plot similar to that shown in example 7.9.

R

In R, we use the reshape() function (section 1.5.3) to make the ”long” data set. We make a data frame (section B.4.5) from the data we’ll need in SAS. We check the data, using the order() function (section 1.5.6) to organize the new data frame by subject instead of visit number. Finally, we write out the data set in dBase format (section 1.2.2).


> ds <- read.csv
("http://www.math.smith.edu/sasr/datasets/helpmiss.csv")
> attach(ds)
> long <- reshape(ds, idvar="id",
varying=list(c("cesd1","cesd2","cesd3","cesd4")),
v.names="cesdtv", timevar="visit", direction="long")
> attach(long)
> tosas <- data.frame(id, visit, cesdtv)
> head(tosas[order(id, visit),])

id visit cesdtv
1 1 1 7
471 1 2 NA
941 1 3 8
1411 1 4 5
2 2 1 11
472 2 2 NA

> library(foreign)
> write.dbf(tosas,"c:\\book\\tosas.dbf")



SAS
In SAS, we read in the data from the dBase format file (section 1.1.5), proc sort (section 1.5.6) it in place, and check the data using proc print(section 1.2.4).


proc import datafile="C:\book\tosas.dbf"
out=fromr dbms=dbf;
run;

proc sort data=fromr; by id visit; run;

proc print data=fromr (obs=5); run;

Obs id visit cesdtv

1 1 1 7
2 1 2 .
3 1 3 8
4 1 4 5
5 2 1 11


Finally, we generate the desired plot with proc sgpanel (section 5.1.11), using the where statement (section A.6.3) to select the first 20 subjects.


proc sgpanel data=fromr;
where id le 20;
panelby id / rows=4 columns=5;
scatter x=visit y=cesdtv;
run;



No comments: