0% found this document useful (0 votes)
199 views

Chapter 1 of SAS Programming by Example

This document contains examples from SAS Programming by Example that demonstrate different ways to read data and format variables using SAS code. It includes over 20 examples showing techniques like inputting data with different delimiters, formats, informats, arrays, and more. The examples are accompanied by brief descriptions and the code to print the resulting data.

Uploaded by

nishu_amin
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
199 views

Chapter 1 of SAS Programming by Example

This document contains examples from SAS Programming by Example that demonstrate different ways to read data and format variables using SAS code. It includes over 20 examples showing techniques like inputting data with different delimiters, formats, informats, arrays, and more. The examples are accompanied by brief descriptions and the code to print the resulting data.

Uploaded by

nishu_amin
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 25

/****************************************************************\ | This file contains selected programs that appear in the book, | | "SAS(R) Programming by Example, by Ron Cody

and Ray Pass. | | (pubcode55126) Several programs reference one of three SAS | | data sets, CLINICAL, MEDICAL, and SALES. Three SAS programs, | | CLINICAL.SAS, MEDICAL.SAS, and SALES.SAS, can be downloaded | | and run on your computer to create these data sets. These | | programs appear at the end of this file. | | | | Copyright (C) 1995 by SAS Institute Inc., Cary, NC, USA. | | | | SAS(R) is a registered trademark of SAS Institute Inc. | | | | SAS Institute does not assume responsibility for the accuracy | | of any material presented in this file. | | | \****************************************************************/ ***The following code appears in Chapter 1 of SAS Programming by Example.*** *** Example 1 ***; DATA LISTINP; INPUT ID HEIGHT WEIGHT GENDER $ AGE; DATALINES; 1 68 144 M 23 2 78 202 M 34 3 62 99 F 37 4 61 101 F 45 ; PROC PRINT DATA=LISTINP; TITLE 'Example 1'; RUN;

*** Example 2.1 ***; DATA COMMAS; INFILE DATALINES DLM=','; INPUT ID HEIGHT WEIGHT GENDER $ AGE; DATALINES; 1,68,144,M,23 2,78,202,M,34 3,62,99,F,37 4,61,101,F,45 ; PROC PRINT DATA=COMMAS; TITLE 'Example 2.1'; RUN;

*** Example 2.2 ***; DATA COMMAS;

INFILE DATALINES DSD; INPUT X Y TEXT $; DATALINES; 1,2,XYZ 3,,STRING 4,5,"TESTING" 6,,"ABC,XYZ" ; PROC PRINT DATA=COMMAS; TITLE 'Example 2.2'; RUN;

***Example 3.1***; DATA INFORMS; INFORMAT LASTNAME $20. DOB MMDDYY8. GENDER $1.; INPUT ID LASTNAME DOB HEIGHT WEIGHT GENDER AGE; FORMAT DOB MMDDYY8.; DATALINES; 1 SMITH 1/23/66 68 144 M 26 2 JONES 3/14/60 78 202 M 32 3 DOE 11/26/47 62 99 F 45 4 WASHINGTON 8/1/70 66 101 F 22 ; PROC PRINT DATA=INFORMS; TITLE 'Example 3.1'; RUN;

***Example 3.2***; DATA COLONS; INPUT ID LASTNAME : $20. DOB : MMDDYY8. HEIGHT WEIGHT GENDER : $1. AGE; FORMAT DOB MMDDYY8.; DATALINES; 1 SMITH 01/23/66 68 144 M 26 2 JONES 3/14/60 78 202 M 32 3 DOE 11/26/47 62 99 F 45 4 WASHINGTON 8/1/70 66 101 F 22 ; PROC PRINT DATA=COLONS; TITLE 'Example 3.2'; RUN;

***Example 4***; DATA AMPERS; INPUT NAME & $25. AGE GENDER : $1.; DATALINES; RASPUTIN 45 M BETSY ROSS 62 F

ROBERT LOUIS STEVENSON 75 M ; PROC PRINT DATA=AMPERS; TITLE 'Example 4'; RUN;

***Example 5.1***; DATA COLINPUT; INPUT ID 1 HEIGHT 2-3 WEIGHT 4-6 GENDER $ 7 AGE 8-9; DATALINES; 168144M23 278202M34 362 99F37 461101F45 ; PROC PRINT DATA=COLINPUT; TITLE 'Example 5.1'; RUN;

***Example 5.2***; DATA COLINPUT; INPUT ID 1 HEIGHT 2-3 WEIGHT 4-6 GENDER $ 7 AGE 8-9; DATALINES; 168144M23 278202M34 362 99F37 461101F45 ; PROC PRINT DATA=COLINPUT; TITLE 'Example 5.2'; RUN;

***Example 5.3***; DATA COLINPUT; INPUT ID 1 AGE 8-9; DATALINES; 168144M23 278202M34 362 99F37 461101F45 ; PROC PRINT DATA=COLINPUT; TITLE 'Example 5.3'; RUN;

***Example 5.4***; DATA COLINPUT; INPUT AGE 8-9 ID 1 WEIGHT 4-6 HEIGHT 2-3 GENDER $ 7; DATALINES; 168144M23 278202M34 362 99F37 461101F45 ; PROC PRINT DATA=COLINPUT; TITLE 'Example 5.4'; RUN;

***Example 6***; DATA POINTER; INPUT @1 ID 3. @5 GENDER $1. @7 AGE 2. @10 HEIGHT 2. @13 DOB MMDDYY6.; FORMAT DOB MMDDYY8.; DATALINES; 101 M 26 68 012366 102 M 32 78 031460 103 F 45 62 112647 104 F 22 66 080170 ; PROC PRINT DATA=POINTER; TITLE 'Example 6'; RUN;

***Example 7.1***; DATA POINTER; INPUT #1 @1 ID @5 GENDER @7 AGE @10 HEIGHT @13 DOB #2 @5 SBP @9 DBP @13 HR FORMAT DOB MMDDYY8.; DATALINES; 3. $1. 2. 2. MMDDYY6. 3. 3. 3.;

101 M 26 68 012366 101 120 80 68 102 M 32 78 031460 102 162 92 74 103 F 45 62 112647 103 134 86 74 104 F 22 66 080170 104 116 72 67 ; PROC PRINT DATA=POINTER; TITLE 'Example 7.1'; RUN;

***Example 7.2***; DATA SKIPSOME; INPUT #2 @1 ID 3. @12 SEX $6. #4; DATALINES; 101 256 RED 9870980 101 898245 FEMALE 7987644 101 BIG 9887987 101 CAT 397 BOAT 68 102 809 BLUE 7918787 102 732866 MALE 6856976 102 SMALL 3884987 102 DOG 111 CAR 14 ; PROC PRINT DATA=SKIPSOME; TITLE 'Example 7.2'; RUN;

***Example 8***; DATA PARTS; INPUT @1 PARTID $14. @1 ST $2. @6 WT 3. @13 YR 2. @16 PARTDESC $24. @41 QUANT 4.; DATALINES; NY101110060172 LEFT-HANDED WHIZZER MA102085112885 FULL-NOSE BLINK TRAP CA112216111291 DOUBLE TONE SAND BIT NC222845071970 REVERSE SPIRAL RIPSHANK ; PROC PRINT DATA=PARTS; TITLE 'Example 8'; RUN;

233 1423 45 876

***Example 9.1***; DATA LONGWAY; INPUT ID 1-3 Q1 4 Q2 5 Q3 6 Q4 7 Q5 8 Q6 9-10 Q7 11-12 Q8 13-14 Q9 15-16 Q10 17-18 HEIGHT 19-20 AGE 21-22; DATALINES; 1011132410161415156823 1021433212121413167221 1032334214141212106628 1041553216161314126622 ; PROC PRINT DATA=LONGWAY; TITLE 'Example 9.1'; RUN;

***Example 9.2***; DATA SHORTWAY; INPUT ID 1-3 @4 (Q1-Q5)(1.) @9 (Q6-Q10 HEIGHT AGE)(2.); DATALINES; 1011132410161415156823 1021433212121413167221 1032334214141212106628 1041553216161314126622 ; PROC PRINT DATA=SHORTWAY; TITLE 'Example 9.2'; RUN;

***Example 9.3***; DATA PAIRS; INPUT @1 ID 3. @6 (QN1-QN5)(1. +3) @7 (QC1-QC5)($1. +3) @26 (HEIGHT AGE)(2. +1 2.); DATALINES; 101 1A 3A 4B 4A 6A 68 26 102 1A 3B 2B 2A 2B 78 32

103 2B 3D 2C 4C 4B 104 1C 5C 2D 6A 6A ; PROC PRINT DATA=PAIRS; TITLE 'Example 9.3'; RUN;

62 45 66 22

***Example 10***; DATA MIXED; INPUT @20 TYPE $1. @; IF TYPE = '1' THEN INPUT ID 1-3 AGE 4-5 WEIGHT 6-8; ELSE IF TYPE = '2' THEN INPUT ID 1-3 AGE 10-11 WEIGHT 15-17; DATALINES; 00134168 1 00245155 1 003 23 220 2 00467180 1 005 35 190 2 ; PROC PRINT DATA=MIXED; TITLE 'Example 10'; RUN;

***Example 11.1***; DATA LONGWAY; INPUT X Y; DATALINES; 1 2 3 4 5 6 6 9 10 12 13 14 ; PROC PRINT DATA=LONGWAY; TITLE 'Example 11.1'; RUN;

***Example 11.2***; DATA SHORTWAY; INPUT X Y @@; DATALINES;

1 2 3 4 5 6 6 9 10 12 13 14 ; PROC PRINT DATA=SHORTWAY; TITLE 'Example 11.2'; RUN;

***Example 12.1***; DATA ERRORS; INPUT X 1-2 Y 4-5; DATALINES; 11 23 23 NA NA 47 55 66 ;

***Example 12.2***; DATA ERRORS; INPUT X ?? 1-2 Y ?? 4-5; DATALINES; 11 23 23 NA NA 47 55 66 ;

***The following code appears in Chapter 5 of SAS Programming by Example.*** ***Example 5***; DATA TEMPER; INPUT DUMMY $ @@; IF DUMMY="N" THEN TEMP=98.6; ELSE TEMP=INPUT (DUMMY,5.); DROP DUMMY; DATALINES; 99.7 N 97.9 N N 112.5 RUN;

***Example 10.1***; DATA CONVERT; INPUT DUMMY $ @@; DUMMY2=SUBSTR (DUMMY,1,LENGTH(DUMMY)-1); IF INDEX (DUMMY,"I") NE 0 THEN

CM=2.54*INPUT (DUMMY2,5.); ELSE IF INDEX (DUMMY,"C") NE 0 THEN CM=INPUT (DUMMY2,5.); ELSE CM=.; DROP DUMMY DUMMY2; DATALINES; 23C 100I 12I 133C 35I 45C 35 47I RUN;

***Example 10.2***; DATA CONVERT; INPUT DUMMY $ @@; LENGTH LAST $ 1; LENGTH=LENGTH (DUMMY); LAST=SUBSTR (DUMMY,LENGTH,1); FIRST=SUBSTR (DUMMY,1,LENGTH-1); IF LAST EQ "I" THEN CM=2.54*INPUT (FIRST,5.); ELSE IF LAST EQ "C" THEN CM=INPUT (FIRST,5.); ELSE CM=.; KEEP CM; DATALINES; 23C 100I 12I 133C 35I 45C 35 47I RUN;

***Example 12***; DATA TRANS; ARRAY QUES[10] $ 1 QUES1-QUES10; INPUT (QUES1-QUES10)($1.); DO J = 1 TO 10; QUES[J]=TRANSLATE (QUES[J],"ABCDE","12345"); END; DROP J; DATALINES; 2412552134 1234512345 . . . RUN;

***The following code appears in Chapter 6 of SAS Programming by Example.*** ***Example 2***; DATA MDYEXAMP; INPUT DAY 1-2 MONTH 10-11 YEAR 20-23;

DATE=MDY (MONTH,DAY,YEAR); FORMAT DATE WORDDATE.; DATALINES; 12 11 1992 11 09 1899 ; PROC PRINT DATA=MDYEXAMP; TITLE 'Example of MDY Function'; RUN;

***The following code appears in Chapter 8 of SAS Programming by Example.*** ***Example 1***; ******* INCORRECT PROGRAM *******; DATA NOGOOD; SUBJECT=SUBJECT+1; INPUT SCORE1 SCORE2; DATALINES; 3 4 5 6 7 8 ; PROC PRINT DATA=NOGOOD; TITLE1 "Incorrect Program"; RUN;

***Example 2***; DATA BETTER; RETAIN SUBJECT 0; SUBJECT=SUBJECT + 1; INPUT SCORE1 SCORE2; DATALINES; 3 4 5 6 7 8 ; PROC PRINT DATA=BETTER; TITLE1 "Correct Program"; RUN;

***Example 3***; DATA BEST; SUBJECT+1; INPUT SCORE1 SCORE2; DATALINES; 3 4 5 6

7 8 ; PROC PRINT DATA=BEST; TITLE1 "Correct Program"; RUN;

***Example 4***; DATA SCORING; ARRAY KEY[5] $ ARRAY ANS[5] $ ARRAY SCORE[5] 1 KEY1-KEY5; 1 ANS1-ANS5; SCORE1-SCORE5; * ANSWER KEY * STUDENT RESPONSES * ITEM SCORES, * 1=CORRECT, * 0=WRONG ; ; ; ; ;

RETAIN KEY1-KEY5; IF _N_=1 THEN DO; INPUT (KEY1-KEY5)($1.); DELETE; END; ELSE DO; INPUT (ANS1-ANS5)($1.); DO I=1 TO 5; IF KEY[I]=ANS[I] THEN SCORE[I]=1; ELSE SCORE[I]=0; END; RAW=SUM (OF SCORE1-SCORE5); PERCENT=(100*RAW)/5; END; KEEP RAW PERCENT; DATALINES; ABCDE ABABA ABCDA ; PROC PRINT DATA=SCORING; TITLE1 "Scoring a Test"; RUN;

***The following code appears in Chapter 9 of SAS Programming by Example.*** ***Example 1***; PROC PRINT DATA=MEDICAL; VAR SUB_ID DIAGCODE ADMIT_DT DISCH_DT HOSPCODE LOS COST; RUN;

***Example 2***; PROC PRINT DATA=MEDICAL; ID SUB_ID; VAR DIAGCODE ADMIT_DT DISCH_DT HOSPCODE LOS COST; RUN;

***Example 3***; PROC PRINT DATA=MEDICAL LABEL; TITLE "Hospital Data Base Report"; TITLE2 "_________________________"; ID SUB_ID; VAR DIAGCODE ADMIT_DT DISCH_DT HOSPCODE LOS COST; LABEL DIAGCODE="Diagnosis Code" ADMIT_DT="Admission Date" DISCH_DT="Discharge Date" HOSPCODE="Hospital Code" LOS ="Length of Stay" COST ="Cost of Treatment"; FORMAT COST DOLLAR7. SUB_ID SSN11. ADMIT_DT DISCH_DT MMDDYY8.; RUN;

***Example 4***; OPTIONS NOCENTER NODATE NONUMBER; PROC SORT DATA=MEDICAL; BY DIAGCODE; RUN; PROC PRINT DATA=MEDICAL N LABEL; BY DIAGCODE; TITLE "Hospital Data Base Report"; TITLE2 ""; FOOTNOTE "Prepared by RPC and Company"; SUM LOS COST; SUMBY DIAGCODE; ID SUB_ID; VAR DIAGCODE

ADMIT_DT DISCH_DT HOSPCODE LOS COST; LABEL DIAGCODE = "Diagnosis Code" ADMIT_DT = "Admission Date" DISCH_DT = "Discharge Date" HOSPCODE = "Hospital Code" LOS = "Length of Stay" COST = "Cost of Treatment"; FORMAT COST DOLLAR7. SUB_ID SSN11. ADMIT_DT DISCH_DT MMDDYY8.; RUN;

***Example 5***; PROC PRINT DATA=MEDICAL WIDTH=FULL; TITLE "WIDTH option FULL"; VAR SUB_ID DIAGCODE ADMIT_DT DISCH_DT HOSPCODE LOS COST; FORMAT COST DOLLAR7. SUB_ID SSN11. ADMIT_DT DISCH_DT MMDDYY8.; RUN;

***Example 6***; PROC PRINT DATA=MEDICAL WIDTH=MINIMUM; TITLE "WIDTH option MINIMUM"; VAR SUB_ID DIAGCODE ADMIT_DT DISCH_DT HOSPCODE LOS COST; FORMAT COST DOLLAR7. SUB_ID SSN11. ADMIT_DT DISCH_DT MMDDYY8.; RUN;

***The following code appears in Chapter 10 of SAS Programming by Example.*** ***Example 1***;

PROC MEANS DATA=SALES; TITLE "Sample Output from PROC MEANS"; CLASS REGION ITEM; VAR QUANTITY; OUTPUT OUT=QUAN_SUM SUM=TOTAL; RUN; PROC PRINT DATA=QUAN_SUM; TITLE "Summary Data Set"; RUN;

***Example 6***; DATA TEST; INPUT HR SBP DBP; DATALINES; 80 160 100 70 150 90 60 140 80 ; PROC MEANS NOPRINTDATA=TEST; VAR HR SBP DBP; OUTPUT OUT =MOUT MEAN=MHR MSBP MDBP; RUN; DATA PERCENT ; SET TEST; DROP MHR MSBP MDBP _TYPE_ _FREQ_; IF _N_=1 THEN SET MOUT; HRPER =100*HR/MHR; SBPPER=100*SBP/MSBP; DBPPER=100*DBP/MDBP; RUN; PROC PRINT NOOBS DATA=PERCENT; TITLE "Listing of PERCENT Data Set"; RUN;

***Example 7***; /*******************************************************\ | First, create a new data set NEW_CLIN from CLIN which | | contains a numeric variable RATIO which has values | | of 0 for "N" and 1 for "Y". | \******************************************************/ DATA NEW_CLIN; SET CLINICAL; RATIO=INPUT (TRANSLATE(ROUTINE,"01","NY"),1.); /********************************************************\

| | | Two alternatives would be: | | | | IF ROUTINE = "N" THEN RATIO = 0; | | ELSE RATIO = 1; | | | | or | | | | SELECT (ROUTINE); | | WHEN ("N") THEN RATIO = 0; | | WHEN ("Y") THEN RATIO = 1; | | END; | | | \********************************************************/ RUN; PROC SORT DATA=NEW_CLIN; BY PATNUM DATE; RUN; * Create a data set with the last record for each patient; DATA LAST (RENAME=(DATE=LASTDATE CHOL=LASTCHOL)); SET NEW_CLIN (KEEP=PATNUM DATE CHOL); BY PATNUM; IF LAST.PATNUM; RUN; * Output means and medians for each patient to a data set; PROC UNIVARIATE DATA=NEW_CLIN NOPRINT; BY PATNUM; VAR CHOL SBP DBP RATIO; OUTPUT OUT=STATS MEAN=MEANCHOL MEANSBP MEANDBP RATIO MEDIAN=MEDCHOL; RUN; * Combine the LAST data set with the STATS data set; DATA FINAL; MERGE STATS LAST; BY PATNUM; RUN; * Print a final report; PROC PRINT DATA=FINAL LABEL DOUBLE; TITLE "Listing of data set FINAL in Example 7"; ID PATNUM; VAR LASTDATE LASTCHOL MEANCHOL MEDCHOL MEANSBP MEANDBP RATIO; LABEL LASTDATE="Date of Last Visit" MEANCHOL="Mean Chol" MEANSBP ="Mean SBP" MEANDBP ="Mean DBP" MEDCHOL ="Median Chol" LASTCHOL="Last Chol" RATIO ="Proportion of visits that were routine";

FORMAT MEANCHOL MEANSBP MEANDBP MEDCHOL LASTCHOL 5.0 RATIO 3.2; RUN;

***The following code appears in Chapter 11 of SAS Programming by Example.*** ***Example 1***; PROC FORMAT; VALUE GENDER 1 = "Male" 2 = "Female" . = "Missing" OTHER = "Miscoded"; VALUE $RACE "C" = "Caucasian" "A" = "African American" "H" = "Hispanic" "N" = "Native American" OTHER = "Other" " " = "Missing"; VALUE $LIKERT "1" = "Str dis" "2" = "Disagree" "3" = "No opinion" "4" = "Agree" "5" = "Str agree" OTHER = " "; VALUE AGEGROUP LOW-<20 = "< 20" 20-<40 = "20 to <40" 40-<60 = "40 to <60" 60-HIGH = "60+"; DATA QUESTION; INPUT ID $ 1-2 GENDER 4 RACE $ 6 AGE 8-9 SATISFY $ 11 TIME $ 13; FORMAT GENDER GENDER. RACE $RACE. SATISFY TIME $LIKERT.; AGEGROUP=PUT (AGE,AGEGROUP.); DATALINES; 01 1 C 45 4 2 02 2 A 34 5 4 03 1 C 67 3 4 04 N 18 5 5 05 9 H 47 4 2 06 1 X 55 3 3 07 2 56 2 2 08 20 1 1 RUN; PROC PRINT DATA=QUESTION NOOBS; TITLE "Data listing with formatted values"; RUN;

***Example 2***; PROC FORMAT; VALUE BADFMT RUN; 1="ONE" 2="TWO" OTHER="MISCODED";

DATA TEST; INPUT X Y; DATALINES; 1 1 2 2 5 5 3 . ; PROC FREQ DATA=TEST; TABLES X Y; FORMAT X Y BADFMT.; RUN;

***Example 8***; PROC FORMAT; INVALUE SBPFMT 40 - 300=_SAME_ OTHER =.; INVALUE DBPFMT 10 - 150=_SAME_ OTHER =.; RUN; DATA FORMAT8; INPUT @1 ID $3. @4 SBP SBPFMT3. @7 DBP DBPFMT3.; DATALINES; 001160090 002310220 003020008 004 080 005150070 ; PROC PRINT DATA=FORMAT8; RUN;

***Example 9***; PROC FORMAT; INVALUE SBPFMT LOW-<40 =.L 40-300 =_SAME_

301-HIGH=.H; INVALUE DBPFMT LOW-<10 =.L 10-150 =_SAME_ 151-HIGH=.H; VALUE CHECK .H="High" .L="Low" . ="Missing" OTHER="Valid"; RUN; DATA FORMAT9; INPUT @1 ID $3. @4 SBP SBPFMT3. @7 DBP DBPFMT3.; DATALINES; 001160090 002310220 003020008 004 080 005150070 ; PROC PRINT DATA=FORMAT9 NOOBS; TITLE "Listing from Example 9"; RUN; PROC FREQ DATA=FORMAT9; FORMAT SBP DBP CHECK.; TABLES SBP DBP / MISSING NOCUM; RUN; PROC MEANS DATA=FORMAT9 N MEAN MAXDEC=1; VAR SBP DBP; RUN;

***Example 10***; PROC FORMAT; INVALUE TEMPER 70-110=_SAME_ "N" = 98.6 OTHER=.; RUN; DATA TEST; INPUT TEMP : TEMPER. @@; DATALINES; 99.7 N 97.9 N N 112.5 ; PROC PRINT DATA=TEST NOOBS; TITLE "Temperature Listing"; RUN;

***Example 11.1***;

PROC FORMAT; VALUE $ICDFMT "072"="Mumps" "410"="Heart Attack" "487"="Influenza" "493"="Asthma" "700"="Corns"; RUN;

***Example 11.2***: DATA CODES; INPUT @1 ICD9 $3. @5 DESCRIPT $12.; DATALINES; 072 MUMPS 410 HEART ATTACK 487 INFLUENZA 493 ASTHMA 700 CORNS ; DATA CONTROL; RETAIN FMTNAME "$ICDFMT" TYPE "C" ; SET CODES (RENAME=(ICD9=START DESCRIPT=LABEL)); RUN; PROC FORMAT CNTLIN=CONTROL; RUN; DATA EXAMPLE; INPUT ICD9 $ @@; FORMAT ICD9 $ICDFMT.; DATALINES; 072 493 700 410 072 700 ; PROC PRINT NOOBS DATA=EXAMPLE; TITLE "Using a Control Data Set"; VAR ICD9; RUN;

***Example 12***; DATA COUNTRY; RETAIN FMTNAME "COUNTRY" TYPE "N"; INPUT START 1-2 LABEL $ 3-15; DATALINES; 01UNITED STATES 02FRANCE 03ENGLAND 04SPAIN

05GERMANY ; PROC FORMAT CNTLIN=COUNTRY FMTLIB; RUN;

***The following code appears in Chapter 12 of SAS Programming by Example.*** ***Example 1***; PROC CHART DATA=SALES; TITLE "Vertical Bar Chart"; VBAR REGION; RUN;

***Example 2***; PROC CHART DATA=SALES; TITLE "Horizontal Bar Chart"; HBAR REGION; RUN;

***Example 3***; PROC CHART DATA=SALES; TITLE "Horizontal Bar Chart without Statistics"; HBAR REGION / NOSTAT; RUN;

***Example 4***; PROC CHART DATA=SALES; TITLE "Vertical Bar Chart Showing Percents"; VBAR REGION / TYPE=PERCENT; RUN;

***Example 5***; PROC CHART DATA=SALES; TITLE "Vertical Bar Chart for a Continuous Variable"; VBAR PRICE; RUN;

***Example 6***; PROC CHART DATA=SALES;

TITLE "Vertical Bar Chart Demonstrating MIDPOINTS Option"; VBAR PRICE / MIDPOINTS=8 to 20 by 4; RUN;

***Example 9***; PROC CHART DATA=SALES; TITLE "Adding Options SUMVAR= and TYPE="; VBAR REGION / SUMVAR=QUANTITY TYPE=SUM; RUN;

***Example 10***; PROC CHART DATA=SALES; TITLE "Vertical Bar Chart with GROUP= Option"; VBAR ITEM / GROUP=REGION; RUN;

***Example 11***; PROC CHART DATA=SALES; TITLE "Vertical Bar Chart with SUBGROUP= Option"; VBAR REGION / SUBGROUP=ITEM; RUN;

***Example 12***; PROC CHART DATA=SALES; TITLE "Another Vertical Bar Chart with SUBGROUP= Option"; VBAR REGION / SUBGROUP=PRICE; RUN;

***Example 13***; DATA BLOCKEG; SET CLINICAL (KEEP=DATE ROUTINE SBP); YEAR=YEAR(DATE); RUN; PROC CHART DATA=BLOCKEG; TITLE "Example of a BLOCK CHART"; BLOCK YEAR / GROUP=ROUTINE DISCRETE; BLOCK YEAR / GROUP=ROUTINE SUMVAR=SBP TYPE=MEAN DISCRETE; FORMAT SBP 5.; RUN;

***The following code appears in Chapter 13 of SAS Programming by Example.*** ***Example 1***; PROC PLOT DATA=CLIN_2; TITLE "Scatter Plot of SBP by DBP"; PLOT DBP * SBP; RUN;

***Example 2***; PROC PLOT DATA=CLIN_2; TITLE "Multiple Plots on One Set of Axes"; PLOT (DBP HR)*SBP/OVERLAY; RUN;

***Example 3***; PROC PLOT DATA=CLIN_2; TITLE "Multiple Plots on One Set of Axes"; TITLE2 "with Different Plotting Symbols"; PLOT DBP*SBP="D" HR *SBP="H"/OVERLAY; RUN;

***Example 4***; PROC PLOT DATA=CLIN_2; TITLE "Scatter Plot of SBP by DBP with"; TITLE2 "Drug Group as the Plotting Symbol"; PLOT DBP*SBP=DRUGGRP; RUN;

***Example 5***; PROC PLOT DATA=CLIN_2; TITLE "Plot of SBP versus HR with"; TITLE2 "NAME as the Labeling Variable"; PLOT SBP*HR $ NAME="o"; RUN;

***The following code appears in Chapter 14 of SAS Programming by Example.*** ***Example 5--Inefficient Code***;

DATA SCORE; ARRAY KEY[5] $ 1; ARRAY Q[5] $ 1; RETAIN KEY1 "A" KEY2 "B" KEY3 "C" KEY4 "D" KEY5 "E"; INPUT (Q1-Q5)($1.); DO I=1 TO 5; RAW+(Q[I]=KEY[I]); END; PERCENT=100*RAW/5; DATALINES; ABCDA BBCAC EBCAD ... ;

***Example 5--Efficient Code***; DATA SCORE; ARRAY KEY[5] $ 1; ARRAY Q[5] $ 1; RETAIN KEY1 "A" KEY2 "B" KEY3 "C" KEY4 "D" KEY5 "E"; INPUT (Q1-Q5)($1.); DO I=1 TO 5; RAW+(Q[I]=KEY[I]); END; PERCENT=100*RAW/5; KEEP RAW PERCENT; *or DROP KEY1-KEY5 Q1-Q5 I; DATALINES; ABCDA BBCAC EBCAD ... ;

/****************************************************************\ | Here are the programs to create the CLINICAL.SAS, MEDICAL.SAS, | | and SALES.SAS data sets. These programs can be downloaded and | | run on your computer to create these data sets. | \****************************************************************/ *Program to create the SAS data set CLINICAL LIBNAME C 'C:\SASDATA'; ***Substitute the subdirectory and/or drive of your choice here; DATA C.CLINICAL; LENGTH DRUGGRP ROUTINE $ 1; INFORMAT DATE MMDDYY8.; INPUT PATNUM DATE DRUGGRP CHOL SBP DBP HR ROUTINE; FORMAT DATE MMDDYY8.; DATALINES;

01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 02 02 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 05 05 05 05 05 05 05 06 06 06 06 06 06 07 07 07 07 07 07 ;

01/05/89 02/15/89 05/18/90 09/09/90 11/11/90 01/05/91 02/18/91 02/19/90 02/22/90 02/25/90 04/24/90 08/25/90 03/13/91 07/16/91 10/10/91 10/30/91 12/25/91 01/01/90 02/13/90 05/09/90 08/17/90 10/10/90 10/11/90 11/11/90 02/02/91 05/15/91 08/20/91 03/23/92 05/02/92 07/02/92 07/03/92 07/05/92 01/06/90 03/06/90 04/24/90 06/24/90 08/01/90 10/10/90 12/01/90 01/01/92 01/03/92 04/24/92 05/01/92 05/28/92 06/01/92 01/05/90 04/05/90 04/07/90 06/28/90 01/04/91 03/03/91

D D D D D D D D D D D D D D D D D P P P P P P P P D D D D D D D P P P P P P P D D D D D D P P P P P P

400 350 350 300 305 270 260 390 320 325 304 299 222 243 242 230 200 387 377 380 400 390 380 370 380 380 370 355 306 279 277 261 399 377 400 388 378 388 359 387 379 375 365 321 308 376 379 389 388 400 401

160 156 140 138 142 142 156 180 178 172 166 150 144 140 138 156 142 190 188 182 186 182 178 160 156 120 122 128 130 126 126 130 188 182 180 176 162 156 156 128 128 132 130 132 128 118 124 120 124 128 132

90 88 82 78 82 80 92 100 88 82 78 80 82 80 74 92 82 110 96 88 92 90 82 82 78 78 76 68 72 74 74 80 110 100 92 88 82 78 72 62 66 70 76 78 72 68 72 68 78 80 70

88 80 76 78 84 72 88 82 86 78 99 80 72 68 62 88 80 90 84 80 82 78 72 72 70 56 58 60 68 62 64 72 92 88 82 80 78 78 70 60 62 58 66 68 58 54 70 62 60 66 80

Y Y Y N Y N N N Y Y N Y Y Y Y N Y N Y Y Y N Y Y Y Y N Y N Y Y N N N Y Y Y Y Y N Y N Y N Y Y N Y Y N N

*Program to create the SAS data set MEDICAL;

LIBNAME C 'C:\SASDATA'; ***Substitute the subdirectory and/or drive of your choice here; DATA C.MEDICAL; INFORMAT ADMIT_DT DISCH_DT MMDDYY8. COST COMMA8.2; INPUT SUB_ID DIAGCODE ADMIT_DT DISCH_DT HOSPCODE LOS COST; FORMAT ADMIT_DT DISCH_DT MMDDYY8.; DATALINES; 03916 291 04/13/92 04/14/92 19 1 325.00 09243 291 01/21/92 02/15/92 14 25 6000.00 71543 480 03/06/92 03/07/92 18 1 621.00 96298 480 01/06/92 01/18/92 17 12 7050.99 75986 493 01/13/92 01/27/92 18 14 5521.85 96913 493 03/02/92 03/02/92 15 0 200.00 ;

*Program to create the SAS data set SALES; LIBNAME C 'C:\SASDATA'; ***Substitute the subdirectory and/or drive of your choice here; DATA C.SALES; INPUT PO_NUM ITEM $ REGION $ PRICE QUANTITY; DATALINES; 1456 Hammer NORTH 10 5 1458 Saw NORTH 15 4 1511 Pliers NORTH 8 35 1600 Hammer SOUTH 10 15 1711 Hammer EAST 10 12 1712 Hammer EAST 10 2 1713 Saw EAST 15 25 1715 Saw EAST 15 24 1800 Pliers EAST 8 7 1900 Saw WEST 15 9 1901 Saw WEST 15 5 ;

You might also like