<?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: Percent of total based on matching column values in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919778#M41196</link>
    <description>&lt;P&gt;How about something like this?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines dsd dlm='|';
input COMMODITY	COUNTRY:$25. QUANTITY1	QUANTITY2	QUANTITY3;
datalines;
010|ARGENTINA|2|8|3
010|ANDORRA|3|10|2
010|TOTAL FOR ALL COUNTRIES|5|18|5
020|BELGIUM|10|6|30
020|RUSSIA|15|4|20
020|TOTAL FOR ALL COUNTRIES|25|10|50
;

proc sql;
create table want as
select have.*, quantity1/total as Pct '% of Total' format=percent7.
	from have
		inner join
	(select commodity, quantity1 as Total from have where Country = 'TOTAL FOR ALL COUNTRIES') as tot
	on have.commodity=tot.commodity
;
select * from want;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;Result:&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure SQL: Query Results" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r b header" scope="col"&gt;COMMODITY&lt;/TH&gt;
&lt;TH class="l b header" scope="col"&gt;COUNTRY&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;QUANTITY1&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;QUANTITY2&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;QUANTITY3&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;% of Total&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;ARGENTINA&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;8&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;40%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;ANDORRA&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;60%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;18&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;100%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;BELGIUM&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;6&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;TD class="r data"&gt;40%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;RUSSIA&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="r data"&gt;60%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;
&lt;TD class="r data"&gt;25&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;50&lt;/TD&gt;
&lt;TD class="r data"&gt;100%&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
    <pubDate>Mon, 11 Mar 2024 15:54:54 GMT</pubDate>
    <dc:creator>SASJedi</dc:creator>
    <dc:date>2024-03-11T15:54:54Z</dc:date>
    <item>
      <title>Percent of total based on matching column values</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919775#M41195</link>
      <description>&lt;P&gt;New to SAS -- I know this is probably silly to most of you but it's taken me hours. I have a dataset that looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;COMMODITY&lt;/TD&gt;&lt;TD&gt;COUNTRY&lt;/TD&gt;&lt;TD&gt;QUANTITY1&lt;/TD&gt;&lt;TD&gt;QUANTITY2&lt;/TD&gt;&lt;TD&gt;QUANTITY3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010&lt;/TD&gt;&lt;TD&gt;ARGENTINA&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010&lt;/TD&gt;&lt;TD&gt;ANDORRA&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010&lt;/TD&gt;&lt;TD&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;020&lt;/TD&gt;&lt;TD&gt;BELGIUM&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;020&lt;/TD&gt;&lt;TD&gt;RUSSIA&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;020&lt;/TD&gt;&lt;TD&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are many commodity codes, countries, and quantities, so doing it manually would be a pain. I am trying to use Quantity 1 values as a base quantity (so the others should be untouched) to generate a percentage report to see which country generates what % of world total quantity for a given commodity code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ideally that would be represented in a different column like so:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;COMMODITY&lt;/TD&gt;&lt;TD&gt;COUNTRY&lt;/TD&gt;&lt;TD&gt;QUANTITY1&lt;/TD&gt;&lt;TD&gt;% of total&lt;/TD&gt;&lt;TD&gt;QUANTITY2&lt;/TD&gt;&lt;TD&gt;QUANTITY3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010&lt;/TD&gt;&lt;TD&gt;ARGENTINA&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;40%&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010&lt;/TD&gt;&lt;TD&gt;ANDORRA&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;60%&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010&lt;/TD&gt;&lt;TD&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;100%&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;020&lt;/TD&gt;&lt;TD&gt;BELGIUM&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;50%&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;020&lt;/TD&gt;&lt;TD&gt;RUSSIA&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;50%&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;020&lt;/TD&gt;&lt;TD&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;100%&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Later in my program, the rows that do not exceed 3% will be omitted from the final dataset, so I need this column to be permanent.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you so much!&lt;/P&gt;</description>
      <pubDate>Mon, 11 Mar 2024 15:28:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919775#M41195</guid>
      <dc:creator>aya_h</dc:creator>
      <dc:date>2024-03-11T15:28:13Z</dc:date>
    </item>
    <item>
      <title>Re: Percent of total based on matching column values</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919778#M41196</link>
      <description>&lt;P&gt;How about something like this?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines dsd dlm='|';
input COMMODITY	COUNTRY:$25. QUANTITY1	QUANTITY2	QUANTITY3;
datalines;
010|ARGENTINA|2|8|3
010|ANDORRA|3|10|2
010|TOTAL FOR ALL COUNTRIES|5|18|5
020|BELGIUM|10|6|30
020|RUSSIA|15|4|20
020|TOTAL FOR ALL COUNTRIES|25|10|50
;

proc sql;
create table want as
select have.*, quantity1/total as Pct '% of Total' format=percent7.
	from have
		inner join
	(select commodity, quantity1 as Total from have where Country = 'TOTAL FOR ALL COUNTRIES') as tot
	on have.commodity=tot.commodity
;
select * from want;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;Result:&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure SQL: Query Results" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r b header" scope="col"&gt;COMMODITY&lt;/TH&gt;
&lt;TH class="l b header" scope="col"&gt;COUNTRY&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;QUANTITY1&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;QUANTITY2&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;QUANTITY3&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;% of Total&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;ARGENTINA&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;8&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;40%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;ANDORRA&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;60%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;18&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="r data"&gt;100%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;BELGIUM&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;6&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;TD class="r data"&gt;40%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;RUSSIA&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="r data"&gt;60%&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;TOTAL FOR ALL COUNTRIES&lt;/TD&gt;
&lt;TD class="r data"&gt;25&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;50&lt;/TD&gt;
&lt;TD class="r data"&gt;100%&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Mon, 11 Mar 2024 15:54:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919778#M41196</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2024-03-11T15:54:54Z</dc:date>
    </item>
    <item>
      <title>Re: Percent of total based on matching column values</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919782#M41197</link>
      <description>&lt;P&gt;First, please provide example data in the form of data step code pasted into a text or code box&amp;nbsp; opened by clicking on the &amp;lt;/&amp;gt; or "running man" icon above the message box. Example:&lt;/P&gt;
&lt;PRE&gt;data have;
   input commodity $ Country :$10. quantity1 quantity2 quantity3;
datalines;
010	ARGENTINA	2	8	3
010	ANDORRA	3	10	2
020	BELGIUM	10	6	30
020	RUSSIA	15	4	20
;&lt;/PRE&gt;
&lt;P&gt;Second, including intermediate summary rows like your Total for commodity actually makes it harder in many respects because that row of data needs to be treated differently. So I have excluded those.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If I understand what you want this may be one way (using the above data set)&lt;/P&gt;
&lt;PRE&gt;proc tabulate data=have out=example;
   class commodity country;
   var quantity: ;
   tables commodity,
         (country All='All countries'),
          quantity: *(sum='Number'*f=best5. pagepctsum ='% of total')
   ;
run;&lt;/PRE&gt;
&lt;P&gt;The use of Quantity: above is a list generator and will use all the variables whose names start with quantity.&lt;/P&gt;
&lt;P&gt;The above code creates a table for each commodity in the results window. The Out= option on the proc statement does create a data set with the summary values though it has a bit of extra info.&lt;/P&gt;
&lt;P&gt;The Country value will be blank where where the _type_ variable is 10, which means that it is the "All countries" row.&lt;/P&gt;
&lt;P&gt;Proc Tabulate requires a statistic for your quantity variable and Sum is the choice so the All countries row has a total. The output data set will have these in the Quantity1_sum, Quantity2_sum (continue the pattern).&lt;/P&gt;
&lt;P&gt;The percents will be in variables named Quantity1_pctsum_10_quantity1 (the 10 is the same as the _type_ to show which total was used as the denominator).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since you didn't provide any example of data where the % do not exceed 3 or show what you expect to create when that occurs I can't help past that.&lt;/P&gt;
&lt;P&gt;It may be because of "delete row" rule that this might make an easier to use data set:&lt;/P&gt;
&lt;PRE&gt;proc tabulate data=have out=example;
   class commodity country;
   var quantity: ;
   tables commodity,
         (country All='All countries'),
          quantity1 *(sum='Number'*f=best5. pagepctsum ='% of total')
   ;
   tables commodity,
         (country All='All countries'),
          quantity2 *(sum='Number'*f=best5. pagepctsum ='% of total')
   ;
   tables commodity,
         (country All='All countries'),
          quantity3 *(sum='Number'*f=best5. pagepctsum ='% of total')
   ;
run;&lt;/PRE&gt;
&lt;P&gt;As each quantity variable will have a separate block of values (rows) to work with.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 11 Mar 2024 16:07:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Percent-of-total-based-on-matching-column-values/m-p/919782#M41197</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2024-03-11T16:07:08Z</dc:date>
    </item>
  </channel>
</rss>

