Sample 24654: How to read hierarchical files
Read multiple related records into a single observation. Determine if a record is a 'header' or 'detail' type record and process the data properly for that record type.
These sample files and code examples are provided by SAS Institute
Inc. "as is" without warranty of any kind, either express or implied, including
but not limited to the implied warranties of merchantability and fitness for a
particular purpose. Recipients acknowledge and agree that SAS Institute shall
not be liable for any damages whatsoever arising out of their use of this material.
In addition, SAS Institute will provide no support for the materials contained herein.
/* Create sample data. Note letters in the first column indicate the */
/* "type" of data to be read. Different types of records require */
/* different INPUT statements. C records contain customer information. */
/* The remaining records contain department, item and quantity */
/* information. */
data _null_;
file 'c:\temp\rawdata.txt';
put
"C 1845" /
" Watson's Mechanical Inc." /
" Connie Lee" /
" 9194678911" /
"H VEN59M590768 1" /
"P 1555441249 5" /
"H VEN42M577621 1" /
"H VEN21M000793 1" /
"S MFF00512EDTR 25" /
"C 1231" /
" Berstein, Epson and Epson"/
" Richard Long" /
" 9199428083" /
"H VEN34M590769 1" /
"P 155441253 3" /
"P 155441256 3" /
"H VEN34M000792 1" /
"S MFF00075WDPR 25" ;
run;
/* Each time a customer record is encountered (type='C'), */
/* customer information is read in to the proper variables and */
/* output to the CUSTOMER data set. The account number */
/* is retained because it is also written to the ORDERS data set. */
/* Each time an order is found, the order information is read from */
/* the file and output to the ORDERS data set. Note the KEEP= */
/* options on each of the data sets named in the DATA statement. */
/* Only the data related to the customer is kept in the CUSTOMER */
/* data set. Likewise only data related to the orders is maintained */
/* in the ORDERS data set. */
data customer(keep=account company contact phone)
orders(keep=account dept itemno quantity);
retain account;
infile 'c:\temp\rawdata.txt' truncover;
input @1 type $ @;
select;
when(type='C') do;
input @3 account $4. /
@3 company $30. /
@3 contact $25. /
@3 phone $10. ;
output customer;
end;
when(type in('S', 'H', 'P')) do;
input @3 itemno :$12. quantity ;
dept = type;
output orders;
end;
otherwise do;
put 'Error in record ' _n_ 'as follows:' _infile_;
delete;
end;
end;
run;
proc print data=orders;
title1 'Data Set Containing Detail Information';
run;
proc print data=customer;
title1 'Data Set Containing Header Information';
run;
These sample files and code examples are provided by SAS Institute
Inc. "as is" without warranty of any kind, either express or implied, including
but not limited to the implied warranties of merchantability and fitness for a
particular purpose. Recipients acknowledge and agree that SAS Institute shall
not be liable for any damages whatsoever arising out of their use of this material.
In addition, SAS Institute will provide no support for the materials contained herein.
Data Set Containing Detail Information 14:27 Thursday, November 4, 2004 276
Obs account itemno quantity dept
1 1845 VEN59M590768 1 H
2 1845 1555441249 5 P
3 1845 VEN42M577621 1 H
4 1845 VEN21M000793 1 H
5 1845 MFF00512EDTR 25 S
6 1231 VEN34M590769 1 H
7 1231 155441253 3 P
8 1231 155441256 3 P
9 1231 VEN34M000792 1 H
10 1231 MFF00075WDPR 25 S
Data Set Containing Header Information
Obs account company contact phone
1 1845 Watson's Mechanical Inc. Connie Lee 9194678911
2 1231 Berstein, Epson and Epson Richard Long 9199428083
Read multiple related records into a single observation. Determine if a record is a 'header' or 'detail' type record.
Type: | Sample |
Topic: | SAS Reference ==> DATA Step Common Programming Tasks ==> Reading and Writing External Data
|
Date Modified: | 2019-09-23 15:35:23 |
Date Created: | 2004-09-30 14:09:01 |
Operating System and Release Information
SAS System | Base SAS | All | n/a | n/a |