<?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: Transposing Data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989807#M380235</link>
    <description>&lt;P&gt;If your data include one&amp;nbsp;&lt;SPAN&gt;customer has both&amp;nbsp;NON_COE and COE rows, that would not be a problem, sas would generate two columns as you wanted.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;But if your data include only&amp;nbsp;&amp;nbsp;NON_COE or COE row in each customer, that is another story, you need to pad&amp;nbsp;both&amp;nbsp;NON_COE and COE rows in it.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input customer flag $ count;
cards;
12345 NON_COE 2
12346 COE 5
;

data flag;
input flag $;
cards;
NON_COE
COE
;

proc sql;
create table have2 as
select a.*,coalesce(b.count,0) as count
 from 
(
select * from
(select distinct customer from have),
(select distinct flag from flag)
) as a natural left join have as b
;
quit;

proc transpose data=have2 out=want;
by customer;
var count;
id flag;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 18 Jun 2026 07:52:12 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2026-06-18T07:52:12Z</dc:date>
    <item>
      <title>Transposing Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989804#M380233</link>
      <description>&lt;P&gt;Good Evening, I need some help.&lt;/P&gt;&lt;P&gt;I have a table which has customer, flag and count variables. Below is an example of this table.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;flag&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;NON_COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For any given customer I might or might not have counts for ‘COE’ and ‘NON_COE’.&lt;/P&gt;&lt;P&gt;It could be any of below three scenarios.&lt;/P&gt;&lt;P&gt;Scenarios 1: Has both NON_COE and COE rows&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;flag&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;NON_COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Scenarios 2:&amp;nbsp;Has a row only for NON_COE&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;flag&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;NON_COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Scenarios 3:&amp;nbsp;Has a row only for COE&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;flag&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I use above table to transpose data like below.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Non_COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;COE&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But in scenarios 2 or 3 where I get count for only either COE or NON_COE (not both), I get only one column, COE/NON_COE when I transpose data. I need to have both COE and NON_COE columns, even if there is no data. For example, in below scenario, where I get the counts only for COE,&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;flag&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to see transpose data as below.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;customer&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Non_COE&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;COE&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;12345&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need help to get the output like above.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance&lt;/P&gt;</description>
      <pubDate>Thu, 18 Jun 2026 00:55:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989804#M380233</guid>
      <dc:creator>SASMom2</dc:creator>
      <dc:date>2026-06-18T00:55:07Z</dc:date>
    </item>
    <item>
      <title>Re: Transposing Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989805#M380234</link>
      <description>&lt;P&gt;I would use PROC TRANSPOSE.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc transpose data=have out=want(drop=_name_);
  by customer;
  id flag;
  var count;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Make sure the data is sorted by CUSTOMER and that the values of FLAG are valid SAS variable names.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you are worried that some of the possible values of FLAG do not exist (and hence will not become variables in the new dataset) then add a step to make sure the variables are created. This will also allow you to force the order of the variables.&amp;nbsp; And perhaps create the variable names using mixed case letters like your desired result.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  length customer Non_COE COE 8;
  set want;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 18 Jun 2026 14:33:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989805#M380234</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2026-06-18T14:33:30Z</dc:date>
    </item>
    <item>
      <title>Re: Transposing Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989807#M380235</link>
      <description>&lt;P&gt;If your data include one&amp;nbsp;&lt;SPAN&gt;customer has both&amp;nbsp;NON_COE and COE rows, that would not be a problem, sas would generate two columns as you wanted.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;But if your data include only&amp;nbsp;&amp;nbsp;NON_COE or COE row in each customer, that is another story, you need to pad&amp;nbsp;both&amp;nbsp;NON_COE and COE rows in it.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input customer flag $ count;
cards;
12345 NON_COE 2
12346 COE 5
;

data flag;
input flag $;
cards;
NON_COE
COE
;

proc sql;
create table have2 as
select a.*,coalesce(b.count,0) as count
 from 
(
select * from
(select distinct customer from have),
(select distinct flag from flag)
) as a natural left join have as b
;
quit;

proc transpose data=have2 out=want;
by customer;
var count;
id flag;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 18 Jun 2026 07:52:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989807#M380235</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2026-06-18T07:52:12Z</dc:date>
    </item>
    <item>
      <title>Re: Transposing Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989809#M380236</link>
      <description>&lt;P&gt;Since you know the names of the target variables, a simple DATA step will do it:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input customer $ flag $ count;
datalines;
12345 COE 5
;

data want;
set have;
length coe non_coe 8;
coe = 0;
non_coe = 0;
select (flag);
  when ("COE") coe = count;
  when ("NON_COE") non_coe = count;
  otherwise putlog "ERROR: non-expected flag!";
end;
drop flag count;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But do you really want that wide dataset, or is this for reporting purposes? What is your final goal, and what is your initial input data?&lt;/P&gt;
&lt;P&gt;I ask this to avoid having an &lt;A href="https://en.wikipedia.org/wiki/XY_problem" target="_blank" rel="noopener"&gt;XY problem&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Thu, 18 Jun 2026 09:19:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989809#M380236</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2026-06-18T09:19:21Z</dc:date>
    </item>
    <item>
      <title>Re: Transposing Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989873#M380241</link>
      <description>&lt;P&gt;Thank you all for your help. I ended up below and it works.&lt;/P&gt;&lt;P&gt;**********************************************************************&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data flag;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;input flag $;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;cards;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;NON_COE&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;COE&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;/* matching flag table with the count table */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc sql;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;create table joinflag as&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; select &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; a.customer,&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; b.flag,&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; a.count&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; from flag b&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; left join COE_count a&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; on b.flag = a.flag;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc sort data= joinflag;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;by customer flag;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;/* transposing data */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc transpose data=joinflag out=results.coe_wide (drop=_name_);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;by customer;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;var count;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;id flag;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 18 Jun 2026 20:14:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Transposing-Data/m-p/989873#M380241</guid>
      <dc:creator>SASMom2</dc:creator>
      <dc:date>2026-06-18T20:14:13Z</dc:date>
    </item>
  </channel>
</rss>

