It consists of a header record for a household and isimmediately followed by one record (row) for each household member, if applicable. For
example, a household of three members will have three records exactly after its headerrecord. A household may have no identified member at the time of the survey. In that case,the household will have only a header record in the file. May I ask that how to let the programme know how many record under the Header? Thank a lot!
A1234567BC012,A
15/FEB/1980,Y,Male,Married,3,FT,55000
3/JUN/1982,N,Female,Married,3,UE,0
24/JAN/2005,N,Male,Unknown,2,NA,0
D135EG023456789,B
19/OCT/1950,Y,Female,Divorced,0,PT,5000
X123A567F9,A
B2345234CC,A
21/MAY/1975,N,Male,Married,2,FT,30000
30/JUN/1978,Y,Female,Married,1,PT,10000
The idea here is to read in the HHID and HHTYPE, but retain those values while counting household members, until a new raw data household line is encountered.
The "trick" here is to read a line of data, but defer reading the HHID and HHTYPE variables. This is done by using the _INFILE_ automatic variable that is generated with every INPUT statement. So the "naked" INPUT statement in the loop below simply generates _INFILE_. When an _INFILE_ with only two comma-separated values is encountered, you know you've finished counting the previous HHID membership. That's when you output the exhausted household, and can identify the incoming household.
data want;
infile 'path to your hirarchical file' dlm=',' end=end_of_data ;
retain hhid ' ' hhtype ' ';
do mem_count=0 by 1 until (countw(_infile_,',')=2 or end_of_data);
input;
end;
if hhid^=' ' then output;
hhid=scan(_infile_,1,',');
hhtype=scan(_infile_,2,',');
run;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.