Help using Base SAS procedures

How do I do this? Please help - newbie user

Reply
Occasional Contributor
Posts: 8

How do I do this? Please help - newbie user

Hello all,

I use SAS 9.3 here and there for work stuff, I know some of the basics but I'm drawing a blank trying to figure out 2 things. Was really hoping for some help.

1) I have variable of just numbers from 0-100. I'd like to tell SAS to group them into 3 groups (0, 1-10, and 10+) so I can analyze using those three groups. How can I do this? I know it's probably something simple but I'm drawing a blank...

2) I have 10 variables, each with numbers varying from 1-5. I want to tell SAS to give me all the answers that were "1" or "2" or "3" overall and by year...how can I do that?

Everything else I need I was able to figure out one way or another except those...any help would be so appreciated. Thanks. I hope I was clear enough...

Contributor
Posts: 45

Re: How do I do this? Please help - newbie user

1)

/*assign group number based on numeric value*/

data answer1;

set one;

if number_var =0 then group_no=1;

else if number_var le 10 then group_no=2;

else group_no=3;

run;

/*sample frequency analysis*/

proc freq data=answer1;

tables group_no;

run;

2)

/*simple subsetting of numeric variable. */

data answer2;

set two;

where number_var in (1,2,3);

run;

/*print new dataset, year information should have been kept from original dataset,*/

proc print data=answer2;

run;

Occasional Contributor
Posts: 8

Re: How do I do this? Please help - newbie user

Posted in reply to Murray_Court

First one I got down perfect thanks to you. THANK YOU!!

I still need a little bit of help on the second. I might not have been clear enough.

I have a dataset called surveys2.

Within that dataset I have 10 variables, each a separate question. (the variables are named q1 q2 q3 ...q10).

Each questions has a 343 rows, in each row is a number 1-5 or 8 (people's answer to the question)

I want to sum up all the answers of 1, 2, 3, 4 ,5 or 8 separately and break them out by year.

For eg: How many ppl answered three in total or in 2010 for each question and overall.

How can I do that?

Contributor
Posts: 45

Re: How do I do this? Please help - newbie user

As I understand survays2 has 11 variables and 343 observations, the first 10 variables have numeric values within (1, 2, 3, 4, 5, 8), (I assume 8 implies the person (observation) didn't answer atall). The last variable is the year.

Q: How many ppl answered three in total or in 2010 for each question and overall.

I am tying to make sense of this question; are you asking how many people answered question the in 2010, and answered question 3 in all time?

If so here is the answer:

/* how did people answer question 3 in 2010> */

proc freq data=survay2(where=(year=2010));

tables q3;

run;

/* how did people answer question 3 in over all years? */

proc freq data=survay2;

tables q3*year;

run;

This should give you a cross-tabulation that provides a yearly breakdown of people's answers.

Super User
Posts: 19,767

Re: How do I do this? Please help - newbie user

Change your data format to the following structure:

Person Question Year Response

You can use proc transpose to change the data format.

SAS Learning Module: How to reshape data wide to long using proc transpose

Then you can use Proc Freq to analyze your data easily.

EG.

proc freq data=have;

table year*response/out=summary1;

run;

Super Contributor
Posts: 307

Re: How do I do this? Please help - newbie user

You can use one of the CAT functions to count how many responses were 1,2,3,4,5 or 8 in each row. Something like:

Data sum_response ;

     set survey2;

     count1 = countc(catt(of q1-q10), '1');

     count2 = countc(catt(of q1-q10), '2');

     etc . . .

     count8 = countc(catt(of q1-q10), '8');

run;

Super User
Posts: 11,336

Re: How do I do this? Please help - newbie user

1) I have variable of just numbers from 0-100. I'd like to tell SAS to group them into 3 groups (0, 1-10, and 10+) so I can analyze using those three groups. How can I do this? I know it's probably something simple but I'm drawing a blank...

Another way to analyze things in groups without having to add anything to your data is custom formats.

Try:

Proc format library=work;

     value mygroup

     0 = ' 0'

     1 - 10 = ' 1 to 10'

     11-100='11 to 100'

;

run;

proc freq data= yourdatasetname;

tables yourvariablename;

format yourvariablename mygroup. ;

run;

The text assosiated with the format can be pretty much what you want.

Ask a Question
Discussion stats
  • 6 replies
  • 228 views
  • 0 likes
  • 5 in conversation