## Thursday, February 5, 2009

### How can I count number of observations per subject in a data set?

We always have this question in mind, while we do the SAS programming and here is the simple answer for that, we just need to use SUM statement and the FIRST.variable in the SET statement and then the RETAIN statement to calculate the observations count per subject.

By doing some minor modification we can calculate observations count per subject per visit also. (Just include visit variable in the BY variable list in PROC sort and First. variable list in datastep with SET statement).

For example:

data dsn;
input patid implants;
datalines;
1 3
1 1
1 2
1 1
2 1
2 2
3 1
4 2
3 1
4 5
2 3
1 6
;
run;

proc sort data=dsn;
by patid;
run;

data dsn1;
set dsn;
by patid;
cnt+1;
if first.patid then cnt=1;
run;

proc sort data=dsn1;
by patid descending cnt;
run;

data dsn2;
set dsn1;
by patid;
retain totcnt;
if first.patid then totcnt=cnt;
output;
run;

proc print data=dsn2;
run;

Output:

karthik said...

hi

there seems some issue in the output you have mentioned. there should be only 5 obs with patid=1.

plz mention if i misunderstood it.

-Karthik

learnsas said...

That was a typo error.

Thanks for attention karthik...

I made changes in the output...

regards
sarath

Melanie said...

What if you want to count each observation only if some other field meets a certain criteria (such as not zero)?

For example:

patid num cnt
1 1 1
1 0 1
1 1 2
1 1 3
2 1 1
2 0 1
2 0 1
3 1 1
3 1 2
4 0 0

learnsas said...

is you want to count the obs to totcnt only if implant count GT 2...

if first.patid and implants GT 2 then totcnt=cnt;

Sarath

Anonymous said...

We can calculate number of observations per subject in the dataset by using below simplest code

data dsn;
input patid implants;
datalines;
1 3
1 1
1 2
1 1
2 1
2 2
3 1
4 2
3 1
4 5
2 3
1 6
;
run;

/***Counting the number of observations per Subject***/
proc sql;
select *,count(patid) as totcnt
from dsn
group by patid
order by patid;
quit;

/****Naveen Boora****/

Anonymous said...

Why can you use proc freq??
data dsn;
input patid implants;
datalines;
1 3
1 1
1 2
1 1
2 1
2 2
3 1
4 2
3 1
4 5
2 3
1 6
;
run;

proc freq data = dsn;
tables patid/ out = dsn1;
run;

junaid said...

how can i count the number of subject in a year in panel data??

junaid said...

how do i count the nulber of subjects per year??