You are on page 1of 19

# Lesson 12

Miscellaneous Topics
More SGPLOT examples
Exporting data
Macro variables
Table Generation - PROC TABULATE
LSB: 4:13-17; 7:1-8; 10:1-6

Obs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

trt
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2

month
0
1
2
3
6
9
12
15
18
21
24
27
30
33
36
0
1
2
3
6
9
12
15
18
21
24
27
30
33
36

cd4
102
177
192
195
217
232
252
270
287
305
323
337
343
360
376
102
184
194
202
223
249
273
299
323
339
363
386
392
394
418

## Want to plot CD4 levels over time for

each of two groups.

## SCATTER vs SERIES vs REG vs STEP

* Scatter Plot for 2 group;
proc sgplot;
xaxis label = 'Months After Start of Therapy' values=(0 to 36 by 6);
yaxis label = 'Mean CD4 Level';
title 'Mean CD4 After Start of Therapy by Treatment Type';
scatter x=month y=cd4/group=trt ;
format trt trtF.;
label trt = 'Treatment Group';
run;

plot points;
proc sgplot;

run;

proc sgplot;

run;

## * Step plot connects points with a step function;

proc sgplot;
step x=month y=cd4/group=trt ;
run;

* Exporting Data;
LIBNAME mylib C:\SAS_Files;
DATA temp;
SET mylib.sescore;
KEEP ptid clinic randdate group educ
wt12 sbp12 sescr12;
RUN;

## * Export data to a comma delimited file;

PROC EXPORT DATA=temp
OUTFILE = 'C:\SAS_Files\se.csv'
DBMS = csv
REPLACE;

## Contents of file 'se.csv'

ptid,clinic,randdate,group,educ,wt12,sbp12,sescr12

A00083,A,02/05/1987,2,7,125,113,1.05
A00301,A,02/17/1987,6,9,,,1.15
A00312,A,04/08/1987,3,4,131,113,1.15
This data can easily be put into excel by
clicking on the file and then saving the file
as a worksheet.

## *export to excel directly;

PROC EXPORT DATA=temp
OUTFILE = 'C:\SAS_Files\se.xls'
DBMS = excel ;
REPLACE;

## Moving a SAS Dataset to another computer

Transfer SAS dataset directly

## - Easy and works on most systems

- Can send as e-mail attachment
Use PROC CPORT and PROC CIMPORT
Works on all systems but requires you to
create an xport (.xpt) file. Can transfer
multiple datasets in one file.

## Creating a SAS Export File

*Run this on the your computer ;
LIBNAME mylib C:\SAS_Files';
FILENAME tranfile C:\SAS_Files\classdata.xpt';
PROC CPORT LIB=mylib FILE=tranfile;
SELECT sescore tomhsp;
RUN;
* Run this on the other computer ;
FILENAME tranfile 'C:\My SAS Datasets\sescore.xpt';
PROC CIMPORT LIB=work FILE=tranfile;
PROC CONTENTS VARNUM DATA=sescore;
PROC CONTENTS VARNUM DATA=tomhsp;
RUN;

TABLE GENERATION
Average Blood Pressure by Treatment at 12-Months

G
R
O
U
P
A
L
L

Diastolic BP

Systolic BP

N
Mean
N
Mean

Rx Group

Beta Blocker

15
77.8
15
120.2

CCB

17
81.7
17
124.1

Diuretic

14
78.1
14
117.4

Alpha Blocker

14
77.7
14
127.6

Ace Inhibitor

13
79.6
13
123.2

Placebo

19
79.6
19
129.9

Total

92
79.2
92
124.0

## PROC TABULATE DATA=class.tomhsp FORMAT=8.0;

CLASS group;
Same as PROC MEANS
VAR sbp12 dbp12;
TABLES group ALL='Total',
(dbp12 sbp12)*(N MEAN*f=8.1)/RTS=20;
LABEL dbp12 = 'Diastolic BP';
LABEL sbp12 = 'Systolic BP';
LABEL group = 'RX Group';
FORMAT group fgroup.;
TITLE 'Average Blood Pressure at 12-Months';
RUN;

## Closer Look At TABLES Statement

TABLES group ALL='Total',
(dbp12 sbp12)*(N MEAN*f=8.1)/RTS=20;
Statement
information to
Statement
information to

## before comma indicates row

display
after comma indicates column
display

## A * indicates to crosstabulate data

A space indicates to concatenate data
Words: For each group and the total display the N and mean of
diastolic and systolic BP

C
L
I
N
I
C
A
L
L

Men

Women

N
Percent
N
Percent

Clinical

Center

Birmingham

12
66.7
6
33.3

Chicago

20
69.0
9
31.0

Minneapolis
30
83.3
6
16.7

Pittsburgh

11
64.7
6
35.3

Total

73
73.0
27
27.0

## PROC TABULATE DATA=class.tomhsp FORMAT=8.;

CLASS clinic sex;
TABLE (clinic ALL='Total'),
(sex=' ')*(N ROWPCTN*f=10.1)/RTS=15;
FORMAT sex sex. clinic \$clinic.;
LABEL clinic = 'Clinical Center';
KEYLABEL ROWPCTN = 'Percent';
TITLE 'N and Percent Men and Women Enrolled
by Center';
RUN;
ODS HTML FILE = mytable.html;

## Macro Variables and Use

LIBNAME t C:\SAS_Files';

## %let nut = kcalbl dcholbl calcbl sodbl;

%let ilist = income educ;
%let options = N MEAN STDDEV;
DATA temp;
SET t.tomhsp (KEEP=ptid clinic &nut
&ilist);
PROC MEANS DATA=temp &options;
VAR &nut; WITH &ilist;
TITLE "PROC Means results for variables &nut
and &ilist";
RUN;
* Makes it easy to modify code;

Macro Variables
%let macrovarname = characters ;

## Defined using %LET statement

Referenced by using &macrovarname
SAS substitutes the value of macrovarname
when it encounters &macrovarname
Useful for making a program easy to
modify

## Simple Macro to Shorten Code

%macro change(v);
dbpdif&v = dbp&v sbpdif&v = sbp&v choldif&v = chol&v
glucdif&v = gluc&v
%mend change;

dbpbl;
sbpbl;
- cholbl;
- glucbl;

## Suppose I want to compute

the change in 4 variables at
3 time points. Can use
Variables:

data temp;
set temp;
%change(12);
%change(24);
%change(36);
run;

## Dbp12,24,36 and dbpbl

Sbp12,24,36 and sbpbl

## Chol12,24,36 and cholbl

Gluc12,24,36 and glucbl

## Simple Macro to Shorten Code

%macro change(v);
36
%change(12);
MPRINT(CHANGE):
dbpdif12 = dbp12 MPRINT(CHANGE):
sbpdif12 = sbp12 MPRINT(CHANGE):
choldif12 = chol12
MPRINT(CHANGE):
glucdif12 = gluc12
36
%change(24);
MPRINT(CHANGE):
dbpdif24 = dbp24 MPRINT(CHANGE):
sbpdif24 = sbp24 MPRINT(CHANGE):
choldif24 = chol24
MPRINT(CHANGE):
glucdif24 = gluc24
37
%change(36);
MPRINT(CHANGE):
dbpdif36 = dbp36 MPRINT(CHANGE):
sbpdif36 = sbp36 MPRINT(CHANGE):
choldif36 = chol36
MPRINT(CHANGE):
glucdif36 = gluc36
38
run;

dbpbl;
sbpbl;
- cholbl;
- glucbl;

dbpbl;
sbpbl;
- cholbl;
- glucbl;
dbpbl;
sbpbl;
- cholbl;
- glucbl;

SAS substitutes
the value of v
everywhere there
is an &v