<?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: Cross tabulation in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788078#M32354</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input
ID Sex Year Region $ Group Condition;
datalines;
1 1 2015 North 1 1
2 0 2015 North 2 1
3 0 2015 South 3 1
4 1 2015 South 1 1
5 0 2015 South 2 1
6 1 2015 East 3 1
7 1 2016 East 1 1
8 1 2016 East 2 1
9 0 2016 North 3 1
10 0 2017 North 1 1
11 0 2017 South 2 0
12 1 2017 South 3 0
13 1 2018 South 1 0
14 1 2018 South 2 0
15 0 2018 South 3 0
16 1 2018 South 1 0
17 1 2018 North 2 0
18 1 2018 North 3 0
19 0 2018 West 1 0
20 0 2018 West 2 0
;
run;

proc sql;
create table report as
select 1 as id,'Sex' as name length=80,
       put(sex,best.-l) as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by sex,year
/*Sex Total*/
union all
select 1 as id,'Sex' as name length=80,
       put(sex,best.-l) as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by sex
/**************************************/
union all
select 2 as id,'Region' as name length=80,
       Region as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by Region,year
/*Region Total*/
union all
select 2 as id,'Region' as name length=80,
       Region as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by Region

/**************************************/
union all
  select 3 as id,'Group' as name length=80,
       put(Group,best.-l) as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by Group,year
/*Group Total*/
union all
select 3 as id,'Group' as name length=80,
       put(Group,best.-l) as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by Group
/**************************************/
union all
  select 4 as id,'Condition' as name length=80,
       put(Condition,best.-l) as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by Condition,year
/*Condition Total*/
union all
select 4 as id,'Condition' as name length=80,
       put(Condition,best.-l) as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by Condition
;




/*Padding zero for missing level of year*/
create table report2 as
select a.*,coalescec(b.cell,'0(0.00%)') as cell length=80 from
(
select * from (select distinct id,name,level from report),(select distinct year from report)
) as a natural left join report as b 
;
quit;





proc report data=report2 nowd;
column name level year,cell ;
define name/group order=data ' ';
define level/group order=data ' ';
define year/across order=data;
define cell/group ' ';
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ksharp_0-1641205214798.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/67071i9E48723569403453/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Ksharp_0-1641205214798.png" alt="Ksharp_0-1641205214798.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 03 Jan 2022 10:20:30 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2022-01-03T10:20:30Z</dc:date>
    <item>
      <title>Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788044#M32349</link>
      <description>&lt;P&gt;data have;&lt;BR /&gt;input&lt;BR /&gt;ID Sex Year Region $ Group Condition;&lt;BR /&gt;datalines;&lt;BR /&gt;1 1 2015 North 1 1&lt;BR /&gt;2 0 2015 North 2 1&lt;BR /&gt;3 0 2015 South 3 1&lt;BR /&gt;4 1 2015 South 1 1&lt;BR /&gt;5 0 2015 South 2 1&lt;BR /&gt;6 1 2015 East 3 1&lt;BR /&gt;7 1 2016 East 1 1&lt;BR /&gt;8 1 2016 East 2 1&lt;BR /&gt;9 0 2016 North 3 1&lt;BR /&gt;10 0 2017 North 1 1&lt;BR /&gt;11 0 2017 South 2 0&lt;BR /&gt;12 1 2017 South 3 0&lt;BR /&gt;13 1 2018 South 1 0&lt;BR /&gt;14 1 2018 South 2 0&lt;BR /&gt;15 0 2018 South 3 0&lt;BR /&gt;16 1 2018 South 1 0&lt;BR /&gt;17 1 2018 North 2 0&lt;BR /&gt;18 1 2018 North 3 0&lt;BR /&gt;19 0 2018 West 1 0&lt;BR /&gt;20 0 2018 West 2 0&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to create a table like below:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;2015&lt;/TD&gt;&lt;TD&gt;2016&lt;/TD&gt;&lt;TD&gt;2017&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;Total&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Sex&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3 (50%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;2 (67%)&lt;/TD&gt;&lt;TD&gt;3 (37.5%)&lt;/TD&gt;&lt;TD&gt;9 (%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3 (50%)&lt;/TD&gt;&lt;TD&gt;2 (67%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;5 (62.5%)&lt;/TD&gt;&lt;TD&gt;11 (%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Reagion&lt;/TD&gt;&lt;TD&gt;North&lt;/TD&gt;&lt;TD&gt;2 (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;2 (25%)&lt;/TD&gt;&lt;TD&gt;6 (30%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;South&lt;/TD&gt;&lt;TD&gt;3 (50%)&lt;/TD&gt;&lt;TD&gt;2 (67%)&lt;/TD&gt;&lt;TD&gt;2 (67%)&lt;/TD&gt;&lt;TD&gt;4&amp;nbsp; (50%)&lt;/TD&gt;&lt;TD&gt;11 (55%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;East&lt;/TD&gt;&lt;TD&gt;1 (17%)&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;1 (5%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;West&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;1 (0%)&lt;/TD&gt;&lt;TD&gt;2 (25%)&lt;/TD&gt;&lt;TD&gt;3 (15%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Group&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&amp;nbsp; (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;3 (37.5%)&lt;/TD&gt;&lt;TD&gt;7 (35%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&amp;nbsp; (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;3 (37.5%)&lt;/TD&gt;&lt;TD&gt;7 (35%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2 (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;2 (25%)&lt;/TD&gt;&lt;TD&gt;6 (30%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Condition&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6 (100%)&lt;/TD&gt;&lt;TD&gt;3 (100%)&lt;/TD&gt;&lt;TD&gt;1 (33%)&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;10 (50%)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0 (0%)&lt;/TD&gt;&lt;TD&gt;0&amp;nbsp; (0%)&lt;/TD&gt;&lt;TD&gt;2 (67%)&lt;/TD&gt;&lt;TD&gt;8 (100%)&lt;/TD&gt;&lt;TD&gt;10 (50%)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can get the numbers by using separate PROC FREQ procedures. Is there any way to get the entire table using a single procedure?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;</description>
      <pubDate>Sun, 02 Jan 2022 22:20:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788044#M32349</guid>
      <dc:creator>dac_js</dc:creator>
      <dc:date>2022-01-02T22:20:18Z</dc:date>
    </item>
    <item>
      <title>Re: Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788067#M32353</link>
      <description>&lt;P&gt;Maybe proc tabulate, but i doubt that the layout will match your expectations fully.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;options missing=0;

proc tabulate data=have;
   class Sex Year Region Group Condition;
   table
      Sex Region Group Condition
      ,
      Year*(n colpctn) All*(n colpctn)
   ;
run;

options missing=.;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 03 Jan 2022 06:45:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788067#M32353</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-01-03T06:45:30Z</dc:date>
    </item>
    <item>
      <title>Re: Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788078#M32354</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input
ID Sex Year Region $ Group Condition;
datalines;
1 1 2015 North 1 1
2 0 2015 North 2 1
3 0 2015 South 3 1
4 1 2015 South 1 1
5 0 2015 South 2 1
6 1 2015 East 3 1
7 1 2016 East 1 1
8 1 2016 East 2 1
9 0 2016 North 3 1
10 0 2017 North 1 1
11 0 2017 South 2 0
12 1 2017 South 3 0
13 1 2018 South 1 0
14 1 2018 South 2 0
15 0 2018 South 3 0
16 1 2018 South 1 0
17 1 2018 North 2 0
18 1 2018 North 3 0
19 0 2018 West 1 0
20 0 2018 West 2 0
;
run;

proc sql;
create table report as
select 1 as id,'Sex' as name length=80,
       put(sex,best.-l) as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by sex,year
/*Sex Total*/
union all
select 1 as id,'Sex' as name length=80,
       put(sex,best.-l) as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by sex
/**************************************/
union all
select 2 as id,'Region' as name length=80,
       Region as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by Region,year
/*Region Total*/
union all
select 2 as id,'Region' as name length=80,
       Region as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by Region

/**************************************/
union all
  select 3 as id,'Group' as name length=80,
       put(Group,best.-l) as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by Group,year
/*Group Total*/
union all
select 3 as id,'Group' as name length=80,
       put(Group,best.-l) as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by Group
/**************************************/
union all
  select 4 as id,'Condition' as name length=80,
       put(Condition,best.-l) as level length=80,
	   put(year,best.-l) as year length=80,
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have where year=a.year),percentn8.2),')') ) as cell length=80
 from have as a
  group by Condition,year
/*Condition Total*/
union all
select 4 as id,'Condition' as name length=80,
       put(Condition,best.-l) as level length=80,
	   'Total',
	   catx(' ',count(*),cats('(',
put(count(*)/(select count(*) from have ),percentn8.2),')') ) as cell length=80
 from have as a
  group by Condition
;




/*Padding zero for missing level of year*/
create table report2 as
select a.*,coalescec(b.cell,'0(0.00%)') as cell length=80 from
(
select * from (select distinct id,name,level from report),(select distinct year from report)
) as a natural left join report as b 
;
quit;





proc report data=report2 nowd;
column name level year,cell ;
define name/group order=data ' ';
define level/group order=data ' ';
define year/across order=data;
define cell/group ' ';
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ksharp_0-1641205214798.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/67071i9E48723569403453/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Ksharp_0-1641205214798.png" alt="Ksharp_0-1641205214798.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 03 Jan 2022 10:20:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788078#M32354</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-01-03T10:20:30Z</dc:date>
    </item>
    <item>
      <title>Re: Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788091#M32355</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/354291"&gt;@dac_js&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/18408"&gt;@Ksharp&lt;/a&gt;'s solution demonstrates is that you can create "any" report using SAS but that there isn't always a ready made procedure to do exactly what you had in mind.&lt;/P&gt;
&lt;P&gt;The design decision you have to make: Do you need exactly the report as initially designed or is it o.k. to present the information a bit differently using what the SAS proc's allow you to do "easily" and though having code that's simpler and easier to understand and maintain.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 03 Jan 2022 13:41:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788091#M32355</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2022-01-03T13:41:20Z</dc:date>
    </item>
    <item>
      <title>Re: Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788112#M32356</link>
      <description>&lt;P&gt;Thank you! This will work.&lt;/P&gt;</description>
      <pubDate>Mon, 03 Jan 2022 15:47:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788112#M32356</guid>
      <dc:creator>dac_js</dc:creator>
      <dc:date>2022-01-03T15:47:21Z</dc:date>
    </item>
    <item>
      <title>Re: Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788115#M32357</link>
      <description>Thank you for taking time to solve my problem! This creates exactly what I asked for.</description>
      <pubDate>Mon, 03 Jan 2022 15:50:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788115#M32357</guid>
      <dc:creator>dac_js</dc:creator>
      <dc:date>2022-01-03T15:50:18Z</dc:date>
    </item>
    <item>
      <title>Re: Cross tabulation</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788116#M32358</link>
      <description>Thank you for the suggestion!</description>
      <pubDate>Mon, 03 Jan 2022 15:52:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Cross-tabulation/m-p/788116#M32358</guid>
      <dc:creator>dac_js</dc:creator>
      <dc:date>2022-01-03T15:52:42Z</dc:date>
    </item>
  </channel>
</rss>

