<?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: change the value of a flag within a group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753645#M237570</link>
    <description>Well done -- I love a good hash solution!</description>
    <pubDate>Tue, 13 Jul 2021 01:00:27 GMT</pubDate>
    <dc:creator>SAShole</dc:creator>
    <dc:date>2021-07-13T01:00:27Z</dc:date>
    <item>
      <title>change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753603#M237548</link>
      <description>&lt;P&gt;Hi SAS friends,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a dataset that is structured by site, subject, and visits. I have a flag eval to indicate whether an evaluation was performed. If eval='N' for any of visits I would like all visits to display 'N'. How would you approach this?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you in advance,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input site $ subject visit &amp;amp; $ eval $;
datalines;
01  111  Screen   Y
01  111  Visit 1  N
01  111  Visit 2  Y
01  222  Screen   Y
01  222  Visit 1  Y
01  222  Visit 2  Y
02  333  Screen   Y
02  333  Visit 1  Y
02  333  Visit 2  N
02  444  Screen   Y
02  444  Visit 1  Y
02  444  Visit 2  Y
;

data want;
input site $ subject visit &amp;amp; $ eval $;
datalines;
01  111  Screen   N
01  111  Visit 1  N
01  111  Visit 2  N
01  222  Screen   Y
01  222  Visit 1  Y
01  222  Visit 2  Y
02  333  Screen   N
02  333  Visit 1  N
02  333  Visit 2  N
02  444  Screen   Y
02  444  Visit 1  Y
02  444  Visit 2  Y
;
proc print data = want;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 12 Jul 2021 20:00:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753603#M237548</guid>
      <dc:creator>SAShole</dc:creator>
      <dc:date>2021-07-12T20:00:26Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753613#M237554</link>
      <description>&lt;P&gt;Here's one way:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input site $ subject visit &amp;amp; $ eval $;
datalines;
01  111  Screen   Y
01  111  Visit 1  N
01  111  Visit 2  Y
01  222  Screen   Y
01  222  Visit 1  Y
01  222  Visit 2  Y
02  333  Screen   Y
02  333  Visit 1  Y
02  333  Visit 2  N
02  444  Screen   Y
02  444  Visit 1  Y
02  444  Visit 2  Y
;
run;

/* Find the site/subject combinations for which EVAL should be N */
proc sql;
    create table visits_with_N as
    select distinct site
          ,subject
    from have
    where upcase(visit) like "VISIT%"
        and upcase(eval) = 'N';
quit;
    
/* Join those combinations to HAVE, and set EVAL to N where there is a match */
proc sql;
    create table want as
    select h.site
          ,h.subject
          ,h.visit
          ,case
               when v.subject is null
                   then h.eval
               else 'N'
           end as eval
    from have h
    left join visits_with_n v
        on h.site = v.site
        and h.subject = v.subject
    order by site, subject, visit, eval;
quit;

proc print data = want;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;By the way, thank you for the clear question and run-able sample data.&lt;/P&gt;</description>
      <pubDate>Mon, 12 Jul 2021 20:36:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753613#M237554</guid>
      <dc:creator>mklangley</dc:creator>
      <dc:date>2021-07-12T20:36:43Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753635#M237564</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input site $ subject visit &amp;amp; $ eval $;
datalines;
01  111  Screen   Y
01  111  Visit 1  N
01  111  Visit 2  Y
01  222  Screen   Y
01  222  Visit 1  Y
01  222  Visit 2  Y
02  333  Screen   Y
02  333  Visit 1  Y
02  333  Visit 2  N
02  444  Screen   Y
02  444  Visit 1  Y
02  444  Visit 2  Y
;
run;



data want;
	merge have(in=a) have(where=(eval_='N') in=b rename=(eval=eval_));
	if a;
	by site subject;
	
	eval=coalescec(eval_,eval);
	
	drop eval_;
run;

&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 12 Jul 2021 23:07:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753635#M237564</guid>
      <dc:creator>r_behata</dc:creator>
      <dc:date>2021-07-12T23:07:56Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753640#M237566</link>
      <description>&lt;P&gt;A nice question to get some hands on practice for any HASH beginner--&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input site $ subject visit &amp;amp; $ eval $;
datalines;
01  111  Screen   Y
01  111  Visit 1  N
01  111  Visit 2  Y
01  222  Screen   Y
01  222  Visit 1  Y
01  222  Visit 2  Y
02  333  Screen   Y
02  333  Visit 1  Y
02  333  Visit 2  N
02  444  Screen   Y
02  444  Visit 1  Y
02  444  Visit 2  Y
;

data want ;
  if _n_=1 then do ;
   dcl hash h(dataset:"have(where=(eval='N')") ;
   h.definekey('site','subject') ;
   h.definedone() ;
  end ;
  set have ;
  eval=ifc(h.check()=0,'N',eval) ;
 run ;
 
 proc print noobs ; run ;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;TABLE class="table" aria-label="Data Set WORK.WANT"&gt;&lt;CAPTION aria-label="Data Set WORK.WANT"&gt;RESULT&lt;/CAPTION&gt;&lt;COLGROUP&gt;&lt;COL /&gt;&lt;COL /&gt;&lt;COL /&gt;&lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="header" scope="col"&gt;site&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;subject&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;visit&lt;/TH&gt;
&lt;TH class="header" scope="col"&gt;eval&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;01&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="data"&gt;Screen&lt;/TD&gt;
&lt;TD class="data"&gt;N&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;01&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 1&lt;/TD&gt;
&lt;TD class="data"&gt;N&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;01&lt;/TD&gt;
&lt;TD class="r data"&gt;111&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 2&lt;/TD&gt;
&lt;TD class="data"&gt;N&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;01&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="data"&gt;Screen&lt;/TD&gt;
&lt;TD class="data"&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;01&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 1&lt;/TD&gt;
&lt;TD class="data"&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;01&lt;/TD&gt;
&lt;TD class="r data"&gt;222&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 2&lt;/TD&gt;
&lt;TD class="data"&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;02&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="data"&gt;Screen&lt;/TD&gt;
&lt;TD class="data"&gt;N&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;02&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 1&lt;/TD&gt;
&lt;TD class="data"&gt;N&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;02&lt;/TD&gt;
&lt;TD class="r data"&gt;333&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 2&lt;/TD&gt;
&lt;TD class="data"&gt;N&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;02&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="data"&gt;Screen&lt;/TD&gt;
&lt;TD class="data"&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;02&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 1&lt;/TD&gt;
&lt;TD class="data"&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;02&lt;/TD&gt;
&lt;TD class="r data"&gt;444&lt;/TD&gt;
&lt;TD class="data"&gt;Visit 2&lt;/TD&gt;
&lt;TD class="data"&gt;Y&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Tue, 13 Jul 2021 00:19:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753640#M237566</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2021-07-13T00:19:49Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753641#M237567</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;&amp;nbsp;Why not just use the find() method?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  if _n_=1 then
    do;
      dcl hash h(dataset:"have(where=(eval='N')");
      h.definekey('site','subject');
      h.defineData('eval');
      h.definedone();
    end;

  set have;
  _rc=h.find();
/*  if h.find() then;*/
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The syntax with the if condition is just a trick for calling the find method without the need to capture the return value in an additional variable.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could also just code: &lt;EM&gt;h.find();&lt;/EM&gt; but this then clutters the SAS log with return codes from the method call.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Jul 2021 01:09:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753641#M237567</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2021-07-13T01:09:21Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753642#M237568</link>
      <description>&lt;P&gt;Agree. I wanted some fun with IFC &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; after all.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Jul 2021 00:34:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753642#M237568</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2021-07-13T00:34:18Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753643#M237569</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
	create table n_ever as select subject, max(eval='N') as N_ever
		from have
		group by subject;
quit;

proc sql;
	create table want
	as select h.site,h.subject,h.visit,
	case when N_ever=1 then 'N'
	else 'Y' end as eval
		from have as h
		left join
		n_ever as n
		on h.subject=n.subject;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 13 Jul 2021 00:35:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753643#M237569</guid>
      <dc:creator>tarheel13</dc:creator>
      <dc:date>2021-07-13T00:35:53Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753645#M237570</link>
      <description>Well done -- I love a good hash solution!</description>
      <pubDate>Tue, 13 Jul 2021 01:00:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753645#M237570</guid>
      <dc:creator>SAShole</dc:creator>
      <dc:date>2021-07-13T01:00:27Z</dc:date>
    </item>
    <item>
      <title>Re: change the value of a flag within a group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753761#M237618</link>
      <description>&lt;PRE&gt;data have;
input site $ subject visit &amp;amp; $ eval $;
datalines;
01  111  Screen   Y
01  111  Visit 1  N
01  111  Visit 2  Y
01  222  Screen   Y
01  222  Visit 1  Y
01  222  Visit 2  Y
02  333  Screen   Y
02  333  Visit 1  Y
02  333  Visit 2  N
02  444  Screen   Y
02  444  Visit 1  Y
02  444  Visit 2  Y
;

proc sql;
create table want as
select site,subject,visit,min(eval) as eval
 from have
  group by site,subject
   order by 1,2,3;
quit;&lt;/PRE&gt;</description>
      <pubDate>Tue, 13 Jul 2021 12:57:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/change-the-value-of-a-flag-within-a-group/m-p/753761#M237618</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-07-13T12:57:43Z</dc:date>
    </item>
  </channel>
</rss>

