<?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: Imputing missing value with Average value in Array in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/494073#M280293</link>
    <description>&lt;P&gt;Thanks Ballardw! it helps . Cheers!&lt;/P&gt;</description>
    <pubDate>Mon, 10 Sep 2018 10:22:36 GMT</pubDate>
    <dc:creator>Pankp</dc:creator>
    <dc:date>2018-09-10T10:22:36Z</dc:date>
    <item>
      <title>Imputing missing value with Average value in Array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416786#M280289</link>
      <description>&lt;P&gt;&amp;nbsp;Hello All,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have data like -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PT&lt;/TD&gt;&lt;TD&gt;Visit1&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;Visit3&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;Visit5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1001&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1002&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1003&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1004&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1005&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&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 want to use Array to impute the missing value with the average of adjacent non-missing value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;E.g. = for Pt. 1001 - for missing Visit2 I would expect the&amp;nbsp; average of (Visit1+Visit3)/2&amp;nbsp;&lt;/P&gt;&lt;P&gt;Same for Pt 1002&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;- for missing Visit3 and Visit 4, I would expect the&amp;nbsp; average of (Visit2+Visit5)/2 .&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;In later cases, I dont want imputation as I dont have adjacent values present completely.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Does anyone know how to handle this case in array?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;PankP&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Nov 2017 17:45:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416786#M280289</guid>
      <dc:creator>Pankp</dc:creator>
      <dc:date>2017-11-28T17:45:24Z</dc:date>
    </item>
    <item>
      <title>Re: Imputing missing value with Average value in Array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416791#M280290</link>
      <description>&lt;P&gt;Can you transpose the data and then use a proc instead of dealing with it in a wide format?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think PROC TIMESERIES or STDIZE will fill this in automatically if you make it a long format.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/179962"&gt;@Pankp&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;Hello All,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have data like -&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;PT&lt;/TD&gt;
&lt;TD&gt;Visit1&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Visit2&lt;/TD&gt;
&lt;TD&gt;Visit3&lt;/TD&gt;
&lt;TD&gt;Visit4&lt;/TD&gt;
&lt;TD&gt;Visit5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1001&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;11&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1002&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1003&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;11&lt;/TD&gt;
&lt;TD&gt;8&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1004&lt;/TD&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;11&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1005&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;11&lt;/TD&gt;
&lt;TD&gt;8&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&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 want to use Array to impute the missing value with the average of adjacent non-missing value.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E.g. = for Pt. 1001 - for missing Visit2 I would expect the&amp;nbsp; average of (Visit1+Visit3)/2&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Same for Pt 1002&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;- for missing Visit3 and Visit 4, I would expect the&amp;nbsp; average of (Visit2+Visit5)/2 .&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;In later cases, I dont want imputation as I dont have adjacent values present completely.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Does anyone know how to handle this case in array?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;PankP&lt;/SPAN&gt;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Nov 2017 18:02:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416791#M280290</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-11-28T18:02:57Z</dc:date>
    </item>
    <item>
      <title>Re: Imputing missing value with Average value in Array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416799#M280291</link>
      <description>&lt;P&gt;Here's one way that works for your example data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have;
   input PT Visit1  Visit2 Visit3 Visit4 Visit5 ;
datalines;
1001 2 . 5 7 11 
1002 5 7 . . 9 
1003 . 5 6 11 8 
1004 7 7 11 . . 
1005 . 11 8 9 . 
;
run;

data want;
   set have;
   array v visit1-visit5 ;
   array newv {5} _temporary_ ;
   /* copy values into temp holding array newv*/
   do i=1 to dim(v);
      newv[i]=v[i];
   end;
   /* if the first or last of the array are 
      missing we aren't imputing
   */
   do i = 2 to (dim(v)-1);
      if missing(v[i]) then do;
         /* attempt to find value prior to missing*/
         do j= (i-1) to 1 by -1;
            if not missing(v[j]) then do;
               lower=v[j];
               leave;
            end;
         end;
         /* attempt to find value after missing*/
         do j= (i+1) to dim(v);
            if not missing(v[j]) then do;
               upper=v[j];
               leave;
            end;
         end;
         if missing(lower) or missing(upper) then;
         else  newv[i] = mean(lower,upper);
      end;/*missing v[i]*/
   end;
   /* copy the newv to v*/
   do i=1 to dim(v);
      v[i]=newv[i];
   end;       

   drop i j lower upper ;
run;


&lt;/PRE&gt;
&lt;P&gt;The temporary array is used as an easy way to hold the desired values but doesn't run into issues with your second line of data with two successive missing values where use of a single array would result in using the first imputed as the lower indexed value.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Nov 2017 18:19:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416799#M280291</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-11-28T18:19:18Z</dc:date>
    </item>
    <item>
      <title>Re: Imputing missing value with Average value in Array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416992#M280292</link>
      <description>&lt;P&gt;Instead of making a temporary holding array as suggested by &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;, I would just remember the first value for imputation:&lt;/P&gt;&lt;PRE&gt;data want;
  set have;
  array visits visit:;
  do _N_=1 to dim(visits)-1;
    if not missing(visits(_N_)) then
      _first=visits(_N_); /* save as first value for imputation */
    else if not missing(_first) then do;
      do _I_=_N_+1 to dim(visits) until(not missing(visits(_I_)));
        end;
      if _I_&amp;lt;=dim(visits) then do;
        visits(_N_)=(_first+visits(_I_))/2;
        end;
      end;
    end;
  drop _:;
run;

&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Nov 2017 09:29:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/416992#M280292</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2017-11-29T09:29:03Z</dc:date>
    </item>
    <item>
      <title>Re: Imputing missing value with Average value in Array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/494073#M280293</link>
      <description>&lt;P&gt;Thanks Ballardw! it helps . Cheers!&lt;/P&gt;</description>
      <pubDate>Mon, 10 Sep 2018 10:22:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/494073#M280293</guid>
      <dc:creator>Pankp</dc:creator>
      <dc:date>2018-09-10T10:22:36Z</dc:date>
    </item>
    <item>
      <title>Re: Imputing missing value with Average value in Array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/494074#M280294</link>
      <description>&lt;P&gt;Thanks s_lassen for the alternate solution. Cheers!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 10 Sep 2018 10:23:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Imputing-missing-value-with-Average-value-in-Array/m-p/494074#M280294</guid>
      <dc:creator>Pankp</dc:creator>
      <dc:date>2018-09-10T10:23:29Z</dc:date>
    </item>
  </channel>
</rss>

