<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Count cumulative obs by category in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810127#M319467</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs;
input ID	Age_Group $	Income;
cards;
1	21-30	1000
2	51-60	1200
3	31-40	1400
4	51-60	2020
5	21-30	3000
6	51-60	3000
;
run;


data level;
do income=1000 to 3000 by 1000;
output;
end;
run;

proc sql;
create table want as
select *,(select count(*) from have where Age_Group=a.Age_Group and income&amp;lt;=a.income) as Cum_count
from (select * from (select distinct Age_Group from have),(select income from level)) as a 
order by 1,2;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 27 Apr 2022 12:36:59 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2022-04-27T12:36:59Z</dc:date>
    <item>
      <title>Count cumulative obs by category</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810021#M319429</link>
      <description>&lt;P&gt;Hi, I have a dataset contain the age group and income info. I want to create a dataset from it, counting the cumulative income level by age group. For example, for each age group, I want to know how many people have income &amp;lt;= 1000, &amp;lt;= 2000, ... etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried using proc sql - group by function (on age group) along with sum - case when on income, but I got all the income level as column instead of rows. Is there an efficient way to do this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;HAVE:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Age_Group&lt;/TD&gt;&lt;TD&gt;Income&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;21-30&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;51-60&lt;/TD&gt;&lt;TD&gt;1200&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;31-40&lt;/TD&gt;&lt;TD&gt;1400&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;51-60&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;21-30&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;51-60&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;WANT:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Age_Group&lt;/TD&gt;&lt;TD&gt;Income&lt;/TD&gt;&lt;TD&gt;Cumulative_count&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;21-30&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;21-30&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;21-30&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;31-40&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;31-40&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;31-40&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;51-60&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;51-60&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;51-60&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 26 Apr 2022 21:14:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810021#M319429</guid>
      <dc:creator>newboy1218</dc:creator>
      <dc:date>2022-04-26T21:14:32Z</dc:date>
    </item>
    <item>
      <title>Re: Count cumulative obs by category</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810035#M319432</link>
      <description>&lt;P&gt;Assuming you know the start/end of the ranges of income you'd like to represent in your data, I would recommend something like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data income_fmt;
	fmtname='income_fmt';
	type='N';

	do i=1000 to 10000 by 1000;
		start=i;
	end=i+1000 - 1;
	label=i;
	output;
end;
run;

proc format cntlin=income_fmt;
run;

data have;
	infile cards dlm='09'x;
	input ID $ 	Age_Group $	Income;
	cards;
1	21-30	1000
2	51-60	1200
3	31-40	1400
4	51-60	2020
5	21-30	3000
6	51-60	3000
6	51-60	5000
;
	;
	;;
run;

proc sort data=have;
	by age_group;
run;

proc freq data=have noprint;
	by age_group;
	table income/ list outcum sparse out=want;
	format income income_fmt.;
run;

proc print data=want;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;CAVEAT: If you're missing a range, ie 3000 across all categories it will not print in the results&lt;/P&gt;</description>
      <pubDate>Tue, 26 Apr 2022 22:12:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810035#M319432</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2022-04-26T22:12:46Z</dc:date>
    </item>
    <item>
      <title>Re: Count cumulative obs by category</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810037#M319433</link>
      <description>&lt;P&gt;There are some errors in your want output. Anyway to get the correct cumulative counts, use a multilabel format with proc summary.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards dlm='09'x;
input ID	Age_Group $	Income;
cards;
1	21-30	1000
2	51-60	1200
3	31-40	1400
4	51-60	2020
5	21-30	3000
6	51-60	3000
;
run;


proc format;
    value inclvl (multilabel)
        low - 1000 = '&amp;lt;= $1000'
        low - 2000 = '&amp;lt;= $2000'
        low - 3000 = '&amp;lt;= $3000'
        ;
run;


proc summary data=have nway completetypes;
class age_group;
class income / mlf order=formatted;
format income inclvl.;
var id;
output out=want (drop=_:) n=cum_count;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Apr 2022 22:17:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810037#M319433</guid>
      <dc:creator>average_joe</dc:creator>
      <dc:date>2022-04-26T22:17:37Z</dc:date>
    </item>
    <item>
      <title>Re: Count cumulative obs by category</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810127#M319467</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs;
input ID	Age_Group $	Income;
cards;
1	21-30	1000
2	51-60	1200
3	31-40	1400
4	51-60	2020
5	21-30	3000
6	51-60	3000
;
run;


data level;
do income=1000 to 3000 by 1000;
output;
end;
run;

proc sql;
create table want as
select *,(select count(*) from have where Age_Group=a.Age_Group and income&amp;lt;=a.income) as Cum_count
from (select * from (select distinct Age_Group from have),(select income from level)) as a 
order by 1,2;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 27 Apr 2022 12:36:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-cumulative-obs-by-category/m-p/810127#M319467</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-04-27T12:36:59Z</dc:date>
    </item>
  </channel>
</rss>

