/************************************************** How to Read Raw Data into SAS FILENAME: READDATA.SAS *************************************************/ options formchar="|----|+|---+=|-/\<>*"; options nodate; title; /*INSTREAM DATA*/ /* Be sure a placeholder, i.e. "." is used for missing values for both character and numeric values*/ data salary; input lname $ id sex $ salary age; cards; Smith 1028 M . . Williams 1337 F 3500 49 Brun 1829 . 14800 56 Agassi 1553 F 11800 65 Vernon 1626 M 129000 60 ; proc print data=salary; run; /*ENTERING DATA FOR MORE THAN ONE CASE ON THE SAME LINE*/ data test; input x y group @@; cards; 1 2 A 3 12 A 15 22 B 17 29 B 11 44 C 13 29 C 7 21 D 11 29 D 16 19 E 25 27 E 41 12 F 17 19 F ; proc print data=test; run; /*ENTERING DATA FOR A TABLE*/ data opinion; input BEFORE $ AFTER $ count; cards; No No 5 No Yes 80 Yes No 3 Yes Yes 82 ; proc print data=opinion; run; proc freq data=opinion; weight count; tables BEFORE * AFTER ; run; /*READING BLANK SEPARATED VALUES (LIST DATA)*/ data class; infile "class.dat"; input lname $ sex $ age height sbp; run; /*LENGTH STATEMENT*/ data class; infile "class.dat"; length lname $ 12; input lname $ sex $ age height sbp; run; /*READING RAW DATA SEPARATED BY COMMAS (.CSV FILES)*/ data pulse; infile "pulse.csv" firstobs=2 delimiter = "," dsd; input pulse1 pulse2 ran smokes sex height weight activity; run; proc print data=pulse(obs=10); run; /*READING IN RAW DATA SEPARATED BY TABS (.TAB FILES)*/ data iris; infile "c:\temp\labdata\iris.txt" dsd missover dlm="09"X ; length species $ 10; input sepallen sepalwid petallen petalwid species $; run; proc print data=iris; run; /*USING COLUMN-STYLE INPUT TO READ IN RAW DATA THAT ARE ALIGNED IN COLUMNS*/ data marflt; infile "marflt.dat" ; input flight 1-3 depart $ 15-17 dest $ 18-20 boarded 34-36; run; proc print data=marflt(obs=10); run; /*COLUMN-STYLE INPUT (READING COLUMN DATA THAT IS ON 2 LINES)*/ data afifi; infile "afifi.dat"; input #1 idnum 1-4 age 5-8 sex 13-15 surv 16 shoktype 17-20 sbp1 21-24 hgb1 69-72 1 #2 sbp2 21-24 hgb2 69-72 1; run; proc print data=afifi(obs=10); run; /*AN ALTERNATIVE WAY TO READ IN DATA FROM 2 LINES*/ data afifi; infile "afifi.dat"; input idnum 1-4 age 5-8 sex 13-15 surv 16 shoktype 17-20 sbp1 21-24 hgb1 69-72 1 /sbp2 21-24 hgb2 69-72 1; run; proc print data=afifi(obs=10); run; /*FORMATTED-STYLE INPUT*/ data afifi; infile "afifi.dat"; input #1 @1 idnum 4.0 @5 age 4.0 @13 sex 3. @16 surv 1. @17 shoktype 4. @21 sbp1 4. @69 hgb1 4.1 #2 @21 sbp2 4. @69 hgb2 4.1; run; /*FORMATTED-STYLE INPUT ALLOWS YOU TO READ IN DATES AND VALUES CONTAINING COMMAS EMBEDDED IN THEM*/ data marflt2; infile "marflt.dat"; input flight 1-3 @4 date mmddyy6. @10 time time5. orig $ 15-17 dest $ 18-20 @21 miles comma5. mail 26-29 freight 30-33 boarded 34-36 transfer 37-39 nonrev 40-42 deplane 43-45 capacity 46-48; format date mmddyy10. time time5. miles comma5.; run; proc print data=marflt2(obs=10); run; /*THE MISSOVER OPTION*/ data huge; infile "c:\temp\labdata\huge.dat"; input v1-v100; run; proc means data=huge; run; data huge; infile "c:\temp\labdata\huge.dat" missover; input v1-v100; run; proc means data=huge; run; /*USING LRECL FOR VERY LONG LINES OF RAW DATA*/ data huge; infile "c:\temp\labdata\huge.dat" missover lrecl=2000; input v1-v100; run; proc means data=huge; run;