<?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 Add new column with updates reflected without affecting missing data in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633088#M18998</link>
    <description>&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;Hi everyone, below is my working program that I would like to update.&lt;BR /&gt;&lt;BR /&gt;data have&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;input Subject Type &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;$&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;5-12&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;Procedure&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;$&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;15-22&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;datalines&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;20&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Surface   &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;35&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Followup  Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;54&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;428&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Followup  &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;Outer&lt;/SPAN&gt;     &lt;SPAN class="lit"&gt;29&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;765&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Seventh   Other     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;13&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Followup  Surface   &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;98&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;428&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;Outer&lt;/SPAN&gt;     &lt;SPAN class="lit"&gt;10&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;765&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Other     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;19&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;610&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Third     Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;66&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;610&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;17&lt;/SPAN&gt; 
&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
data want &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;drop&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;rc _Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;
   &lt;SPAN class="kwd"&gt;if&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; _N_ &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; do&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="kwd"&gt;declare&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; hash h &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;dataset &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;:&lt;/SPAN&gt; &lt;SPAN class="str"&gt;"have (rename=(Measurement=_Measurement) where=(Type='Initial'))"&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;      h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;definekey &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="str"&gt;'Subject'&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;      h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;definedata &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="str"&gt;'_Measurement'&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;      h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;definedone&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;();&lt;/SPAN&gt;
   &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;

   &lt;SPAN class="kwd"&gt;set&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; have&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   _Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=.;&lt;/SPAN&gt;

   &lt;SPAN class="kwd"&gt;if&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Type ne &lt;/SPAN&gt;&lt;SPAN class="str"&gt;'Initial'&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; rc &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;find&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;();&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   Measurement &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; sum &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;,&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;-&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;_Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;run&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The goal is to subtract the numbers in the "MEASUREMENT" column based on the "SUBJECT", &lt;BR /&gt;"TYPE" and “PROCEDURE” columns. If two values in the “SUBJECT” column match and two values &lt;BR /&gt;in the “PROCEDURE” column match, then the initial measurement should be subtracted from the &lt;BR /&gt;other measurement. For example, the initial measurement in row 1 (20) should be subtracted from &lt;BR /&gt;the followup measurement in row 3 (54) because the subject (500) and procedure (Invasive) match.&lt;BR /&gt;Furthermore, the initial measurement in row 8 (19) should be subtracted from the seventh &lt;BR /&gt;measurement in row 5 (13) because the subject (765) and procedure (Other) match. &lt;BR /&gt;The result should form the "OUTPUT" column. &lt;BR /&gt;&lt;BR /&gt;How can I account for missing values in the "measurement" column and &lt;BR /&gt;keep them without being affected in the "output" column?? &lt;BR /&gt;In addition, I noticed that this program updates the "measurement" column. &lt;BR /&gt;How can I have the updates be created in a new column called "output" while keeping the "measurement" column?&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 18 Mar 2020 21:22:12 GMT</pubDate>
    <dc:creator>AshJuri</dc:creator>
    <dc:date>2020-03-18T21:22:12Z</dc:date>
    <item>
      <title>Add new column with updates reflected without affecting missing data</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633088#M18998</link>
      <description>&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;Hi everyone, below is my working program that I would like to update.&lt;BR /&gt;&lt;BR /&gt;data have&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;input Subject Type &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;$&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;5-12&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;Procedure&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;$&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;15-22&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;datalines&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;20&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Surface   &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;35&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Followup  Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;54&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;428&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Followup  &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;Outer&lt;/SPAN&gt;     &lt;SPAN class="lit"&gt;29&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;765&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Seventh   Other     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;13&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;500&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Followup  Surface   &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;98&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;428&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;Outer&lt;/SPAN&gt;     &lt;SPAN class="lit"&gt;10&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;765&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Other     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;19&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;610&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Third     Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;66&lt;/SPAN&gt; 
&lt;SPAN class="lit"&gt;610&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Initial   Invasive  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;17&lt;/SPAN&gt; 
&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
data want &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;drop&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;rc _Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;
   &lt;SPAN class="kwd"&gt;if&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; _N_ &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; do&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="kwd"&gt;declare&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; hash h &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;dataset &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;:&lt;/SPAN&gt; &lt;SPAN class="str"&gt;"have (rename=(Measurement=_Measurement) where=(Type='Initial'))"&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;      h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;definekey &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="str"&gt;'Subject'&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;      h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;definedata &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="str"&gt;'_Measurement'&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;      h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;definedone&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;();&lt;/SPAN&gt;
   &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;

   &lt;SPAN class="kwd"&gt;set&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; have&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   _Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=.;&lt;/SPAN&gt;

   &lt;SPAN class="kwd"&gt;if&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Type ne &lt;/SPAN&gt;&lt;SPAN class="str"&gt;'Initial'&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; rc &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; h&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;find&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;();&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   Measurement &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;=&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; sum &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;(&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;,&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;-&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;_Measurement&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;);&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;run&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The goal is to subtract the numbers in the "MEASUREMENT" column based on the "SUBJECT", &lt;BR /&gt;"TYPE" and “PROCEDURE” columns. If two values in the “SUBJECT” column match and two values &lt;BR /&gt;in the “PROCEDURE” column match, then the initial measurement should be subtracted from the &lt;BR /&gt;other measurement. For example, the initial measurement in row 1 (20) should be subtracted from &lt;BR /&gt;the followup measurement in row 3 (54) because the subject (500) and procedure (Invasive) match.&lt;BR /&gt;Furthermore, the initial measurement in row 8 (19) should be subtracted from the seventh &lt;BR /&gt;measurement in row 5 (13) because the subject (765) and procedure (Other) match. &lt;BR /&gt;The result should form the "OUTPUT" column. &lt;BR /&gt;&lt;BR /&gt;How can I account for missing values in the "measurement" column and &lt;BR /&gt;keep them without being affected in the "output" column?? &lt;BR /&gt;In addition, I noticed that this program updates the "measurement" column. &lt;BR /&gt;How can I have the updates be created in a new column called "output" while keeping the "measurement" column?&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 18 Mar 2020 21:22:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633088#M18998</guid>
      <dc:creator>AshJuri</dc:creator>
      <dc:date>2020-03-18T21:22:12Z</dc:date>
    </item>
    <item>
      <title>Re: Add new column with updates reflected without affecting missing data</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633100#M18999</link>
      <description>&lt;P&gt;Here is a hashing solution. I created a single missing value in your data for demonstration.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input Subject Type $ 5-12 Procedure $ 15-22 Measurement;
datalines;
500 Initial   Invasive  20 
500 Initial   Surface   35 
500 Followup  Invasive  54 
428 Followup  Outer     29 
765 Seventh   Other     13 
500 Followup  Surface   .  
428 Initial   Outer     10 
765 Initial   Other     19 
610 Third     Invasive  66 
610 Initial   Invasive  17 
;

data want (drop=rc _Measurement);
   if _N_ = 1 then do;
      declare hash h (dataset : "have (rename=(Measurement=_Measurement) where=(Type='Initial'))");
      h.definekey ('Subject');
      h.definedata ('_Measurement');
      h.definedone();
   end;

   set have;
   _Measurement=.;

   if Type ne 'Initial' then rc = h.find();
   NewMeasurement = ifn(Measurement=., ., sum (Measurement, -_Measurement));
run;&lt;/CODE&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 18 Mar 2020 21:51:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633100#M18999</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-03-18T21:51:00Z</dc:date>
    </item>
    <item>
      <title>Re: Add new column with updates reflected without affecting missing data</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633104#M19000</link>
      <description>&lt;P&gt;Please only post code or log results in the code boxes. Long narratives can be very hard to read. The main message window will flow text better as that is the purpose. The code box is better for actual code and log.&lt;/P&gt;</description>
      <pubDate>Wed, 18 Mar 2020 22:42:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Add-new-column-with-updates-reflected-without-affecting-missing/m-p/633104#M19000</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-03-18T22:42:40Z</dc:date>
    </item>
  </channel>
</rss>

