Discover More Tips and Techniques on This Blog

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:


12 comments:

  1. 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

    ReplyDelete
  2. That was a typo error.

    Thanks for attention karthik...

    I made changes in the output...


    regards
    sarath

    ReplyDelete
  3. 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

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

    add like this..

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

    Sarath

    ReplyDelete
  5. 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****/

    ReplyDelete
  6. 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;

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

    ReplyDelete
  8. how do i count the nulber of subjects per year??

    ReplyDelete
  9. Table2: Relationship of recipient with donor
    mother, father-:Related
    How to retrieve the number of observations from a particular category, can somebody help ?

    Example - wife-:Spousal
    Other-:Unrelated

    Category Number of Records
    Related XX
    Spousal XX
    Unrelated XX
    Total XX

    ReplyDelete
  10. Hello,
    How I can create a frequency variable? I mean:
    proc freq data = dsn;
    tables patid/ out = dsn1;
    run;
    I need dsn1 to be a variable inside my original dataset (dsn) and not another dataset
    Thx

    ReplyDelete
  11. try this.....

    proc sql;
    create table dsn as
    select *, count(ptid) as count from dsn
    group by ptid
    ;
    ;
    quit;

    ReplyDelete

Disclosure:

In the spirit of transparency and innovation, I want to share that some of the content on this blog is generated with the assistance of ChatGPT, an AI language model developed by OpenAI. While I use this tool to help brainstorm ideas and draft content, every post is carefully reviewed, edited, and personalized by me to ensure it aligns with my voice, values, and the needs of my readers. My goal is to provide you with accurate, valuable, and engaging content, and I believe that using AI as a creative aid helps achieve that. If you have any questions or feedback about this approach, feel free to reach out. Your trust and satisfaction are my top priorities.