<?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: Retaining character value across same ID in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772071#M245106</link>
    <description>&lt;PRE&gt;data have;
  infile datalines dlm='|' truncover;
  input ID $ (indicator1 indicator2 indicator3 indicator4 indicator5) (:$1.);
  datalines;
001|| ||Y|| || || ||
001||Y|| || || || ||
001|| || ||Y|| || ||
001|| || || || || Y
002||Y|| || || || ||
002|| || ||Y|| || ||
002|| ||Y|| || || ||
002|| || || || || ||
002|| || || ||Y|| ||
;
proc sql;
create table want as
select *,
max(indicator1) as new1,
max(indicator2) as new2,
max(indicator3) as new3,
max(indicator4) as new4,
max(indicator5) as new5
from have
group by id;
quit;
&lt;/PRE&gt;</description>
    <pubDate>Tue, 05 Oct 2021 06:45:05 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2021-10-05T06:45:05Z</dc:date>
    <item>
      <title>Retaining character value across same ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772055#M245096</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I am struggling to retain a value of "Y" for all observations by ID if the value "Y" exists for any record within the same ID:&lt;/P&gt;&lt;P&gt;For example, my data looks like this:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;indicator1&lt;/TD&gt;&lt;TD&gt;indicator2&lt;/TD&gt;&lt;TD&gt;indicator3&lt;/TD&gt;&lt;TD&gt;indicator4&lt;/TD&gt;&lt;TD&gt;indicator5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;but I want it to look like this within the indicatorXnew fields:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;indicator1&lt;/TD&gt;&lt;TD&gt;indicator2&lt;/TD&gt;&lt;TD&gt;indicator3&lt;/TD&gt;&lt;TD&gt;indicator4&lt;/TD&gt;&lt;TD&gt;indicator5&lt;/TD&gt;&lt;TD&gt;indicator1new&lt;/TD&gt;&lt;TD&gt;indicator2new&lt;/TD&gt;&lt;TD&gt;indicator3new&lt;/TD&gt;&lt;TD&gt;indicator4new&lt;/TD&gt;&lt;TD&gt;indicator5new&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;001&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;002&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have some familiarity with RETAIN but only for summing numeric values. I would share code but nothing I try works correctly, but here is the code to generate data set HAVE:&lt;/P&gt;&lt;P&gt;data HAVE;&lt;BR /&gt;infile datalines dlm='|' truncover;&lt;BR /&gt;input ID$ indicator1$ indicator2$ indicator3$ indicator4$ indicator5$;&lt;BR /&gt;datalines;&lt;BR /&gt;001|| ||Y|| || || ||&lt;BR /&gt;001||Y|| || || || ||&lt;BR /&gt;001|| || ||Y|| || ||&lt;BR /&gt;001|| || || || || Y&lt;BR /&gt;002||Y|| || || || ||&lt;BR /&gt;002|| || ||Y|| || ||&lt;BR /&gt;002|| ||Y|| || || ||&lt;BR /&gt;002|| || || || || ||&lt;BR /&gt;002|| || || ||Y|| ||&lt;BR /&gt;;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would appreciate any help, thank you&lt;/P&gt;</description>
      <pubDate>Tue, 05 Oct 2021 02:31:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772055#M245096</guid>
      <dc:creator>ItsAProccess</dc:creator>
      <dc:date>2021-10-05T02:31:10Z</dc:date>
    </item>
    <item>
      <title>Re: Retaining character value across same ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772061#M245099</link>
      <description>&lt;P&gt;Here you go.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile datalines dlm='|' truncover;
  input ID $ (indicator1 indicator2 indicator3 indicator4 indicator5) (:$1.);
  datalines;
001|| ||Y|| || || ||
001||Y|| || || || ||
001|| || ||Y|| || ||
001|| || || || || Y
002||Y|| || || || ||
002|| || ||Y|| || ||
002|| ||Y|| || || ||
002|| || || || || ||
002|| || || ||Y|| ||
;

proc sort data=have;
  by id;
run;

data inter;
  set have;
  by id;
  array ind{*} indicator1-indicator5;
  array new_ind{*} $1 new_indicator1-new_indicator5;
  retain new_ind;
  keep id new_indicator1-new_indicator5;
  do i=1 to dim(new_ind);
    if ind[i]='Y' then new_ind[i]='Y';
  end;
  if last.id then
    do;
      output;
      call missing(of new_ind[*]);
    end;
run;

data want;
  merge have inter;
  by id;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;And here an alternative coding option.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want2;
  set have;
  by id;
  array ind{*} indicator1-indicator5;
  array new_ind{*} $1 new_indicator1-new_indicator5;
  retain new_ind;

  if first.id then 
    do;
      call missing(of new_ind[*]);
      do until(last.id);
        set have;
        by id;
        do i=1 to dim(new_ind);
          if ind[i]='Y' then new_ind[i]='Y';
        end;
      end;
    end;
  drop i;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 05 Oct 2021 03:45:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772061#M245099</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2021-10-05T03:45:29Z</dc:date>
    </item>
    <item>
      <title>Re: Retaining character value across same ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772067#M245104</link>
      <description>&lt;P&gt;Collapse to one record per BY group.&amp;nbsp; If your variables are really coded as Y or missing then you could use UPDATE statement to do the collapsing.&amp;nbsp; The UPDATE statement will ignore the missing values when applying the transaction observations.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data summary;
  update have(obs=0) have;
  by id;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you then need those variable renamed and remerged onto the detailed records use a MERGE statement.&amp;nbsp; If you have a series of variables with a numeric counter it works much better to have the counter as a suffix so that you can use a variable list.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  merge have summary(rename=(indicator1-indicator5=new_indicator1-new_indicator5));
  by id;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 05 Oct 2021 04:54:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772067#M245104</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-10-05T04:54:31Z</dc:date>
    </item>
    <item>
      <title>Re: Retaining character value across same ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772071#M245106</link>
      <description>&lt;PRE&gt;data have;
  infile datalines dlm='|' truncover;
  input ID $ (indicator1 indicator2 indicator3 indicator4 indicator5) (:$1.);
  datalines;
001|| ||Y|| || || ||
001||Y|| || || || ||
001|| || ||Y|| || ||
001|| || || || || Y
002||Y|| || || || ||
002|| || ||Y|| || ||
002|| ||Y|| || || ||
002|| || || || || ||
002|| || || ||Y|| ||
;
proc sql;
create table want as
select *,
max(indicator1) as new1,
max(indicator2) as new2,
max(indicator3) as new3,
max(indicator4) as new4,
max(indicator5) as new5
from have
group by id;
quit;
&lt;/PRE&gt;</description>
      <pubDate>Tue, 05 Oct 2021 06:45:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772071#M245106</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-10-05T06:45:05Z</dc:date>
    </item>
    <item>
      <title>Re: Retaining character value across same ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772123#M245133</link>
      <description>&lt;P&gt;Here's a variation that is such an odd duck, you might not see it again:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   do until (last.id);
      update have (obs=0) have;
      by id;
   end;
   indicator1new = indicator1;
   indicator2new = indicator2;
   indicator3new = indicator3;
   indicator4new = indicator4;
   indicator5new = indicator5;
   do until (last.id);
      set have;
      by id;
      output;
   end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 05 Oct 2021 11:12:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retaining-character-value-across-same-ID/m-p/772123#M245133</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2021-10-05T11:12:35Z</dc:date>
    </item>
  </channel>
</rss>

