DATA Step, Macro, Functions and more

Summarize and calcluate

Reply
Regular Contributor
Posts: 192

Summarize and calcluate

Hi,

 

I have the following data:

 

data have;

infile datalines missover;

input buildingname $10. buildingtype $8. responded $1. jurisdictn $9. enr 3 ;

cards;

happy days privateY nottingha 100

learning public N nottingha

buildingbl privateY nottingha 55

montessori privateN nottingha

bean stalk privateY brunswick 55

learning private Y brunswick 22

early lear privateY brunswick 66

childtime private N brunswick

risingstar public N brunswick

doodlebugs public Y brunswick 34

 

;

run;

 

I couldn't fingure out how to get the enrollment to show in the datatable using the infile statement

Here are the calculations I need to do -- summarize by jursidiction and buldingtype: sum of enrollment divided by total # that responded 'Y'
Calculations:

jurisdiction      private                    public
nottingham    (100+55)/2       
brunswick     (55+22+255)/3            34/1


Final results:
jursidiction     private    public
nottingham     77.5            
brunswick       110.7    34.0

 

 

 

 

How would I do that?  Thanks!  I'm on Base SAS 9.4

 

PROC Star
Posts: 7,364

Re: Summarize and calcluate

It would be easier to do if you entered your data in a format that would make it easier for SAS to read. However, given the way it was entered (at least for the data you showed in your example), the following would work:

 

data have;
  infile datalines truncover;
  informat buildingname $10.;
  informat buildingtype $8.;
  informat responded $1.;
  informat jurisdictn $9.;
  input @;
  _infile_=tranwrd(_infile_,'Y', ' Y');
  _infile_=tranwrd(_infile_,'N', ' N');
  _infile_=tranwrd(_infile_,'public', ' public');
  _infile_=tranwrd(_infile_,'private', ' private');
  input buildingname & buildingtype responded jurisdictn enr;
datalines;
happy days privateY nottingha 100
learning public N nottingha
buildingbl privateY nottingha 55
montessori privateN nottingha
bean stalk privateY brunswick 55
learning private Y brunswick 22
early lear privateY brunswick 66
childtime private N brunswick
risingstar public N brunswick
doodlebugs public Y brunswick 34
;

proc means data=have mean;
  class jurisdictn buildingtype;
  var enr;
run;

Art, CEO, AnalystFinder.com

 

Occasional Contributor
Posts: 6

Re: Summarize and calcluate

I'm sure there are others who can do it better, but is it possible to santaize your input data? It looks to be a bit all over the place making it hard for SAS to differentiate where one variable ends and the next begins. You could either space it per the values in your input statement, or add a delimiter like below:

 

data have;
infile cards missover dlm="|";
length buildingname $10. buildingtype $8. responded $1. jurisdictn $11. enr 3. ;

input buildingname buildingtype responded jurisdictn enr ;
cards;
happy days|private|Y|nottingha|100
learning|public|N|nottingha|0
buildingbl|private|Y|nottingha|55
montessori|private|N|nottingha|
bean stalk|private|Y|brunswick|55
learning|private|Y|brunswick|22
early lear|private|Y|brunswick|66
childtime|private|N|brunswick|
risingstar|public|N|brunswick|
doodlebugs|public|Y|brunswick|34
;
run;

 

 

As for summarizing you could use proc sql or proc report to create a summary table of the values once they are all in the table. 

Ask a Question
Discussion stats
  • 2 replies
  • 105 views
  • 2 likes
  • 3 in conversation