DATA Step, Macro, Functions and more

computing multiple occurrences

Reply
Contributor
Posts: 62

computing multiple occurrences

Hi all, 

I would like to get a total of all roads (digit_road1 to digit_road4); When I used the sum  statement such as  total_digit=sum(of digit_road1-digit_road4)  I got the number of states 8 instead of 28 , which represents the number of occurence of roads.

Any help would be greatly appreciated. Thanks

See code below

data traffic;

  infile datalines;

  input state$ digit_road1 digit_road1 digit_road2 digit_road3 digit_road4 ;

datalines;

 

AL   101 103    .   345 

AK   205 590 500 700

AZ     . 100 390      .

IN   890 623 .       678

MD 755 400 222 678

IL   100 225 678 333

CA 800 455 900 567

TX 120 201 862 108;

 

Super User
Posts: 19,810

Re: computing multiple occurrences

Posted in reply to archibald

Where is 8 and 28 coming from based on your sample data?

 

Depending on your version of SAS you may need to reference the variable list as var1--var2 or var: to use all variables that start with the prefix "var".

 

I didn't think that would happen with the OF keyword though. In older versions of SAS you could be taking the sum of road1-road4 which is really just the substraction of the two variables.

 

What would you like your output to look like?

 

 

 

Contributor
Posts: 62

Re: computing multiple occurrences

8 is the number of cases, that is the number of observations (states).
I wat the output to be the total of all the digit_road variables.
Respected Advisor
Posts: 4,923

Re: computing multiple occurrences

Posted in reply to archibald

Use the N function (count non missing arguments) and sum statements (retained and initialized at 0)

 

data traffic;
  infile datalines;
  input state$ digit_road1 digit_road2 digit_road3 digit_road4 ;
datalines;
AL   101 103    .   345 
AK   205 590 500 700
AZ     . 100 390      .
IN   890 623 .       678
MD 755 400 222 678
IL   100 225 678 333
CA 800 455 900 567
TX 120 201 862 108
;

data roads;
set traffic end=done;
roads + n(of digit_road1-digit_road4);
states + 1;
if done then output;
keep roads states;
run;

proc print data=roads noobs; run;
PG
Ask a Question
Discussion stats
  • 3 replies
  • 183 views
  • 1 like
  • 3 in conversation