<?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: Conditional summing Based on years in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618240#M181337</link>
    <description>&lt;P&gt;You already have matching arrays of year variables (range from 2018 to 2020) and expenditure variables.&amp;nbsp; Since you want total for a subset of those years (2018,2019), this is an excellent situation to use an array (EXPYTD below) with lower bound 2018 and upper bound 2019:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines truncover;
	input ID	EXPENDED_YR_1	EXPENDED_AMOUNT_1	EXPENDED_YR_2	EXPENDED_AMOUNT_2	EXPENDED_YR_3	EXPENDED_AMOUNT_3	EXPENDED_YR_4	EXPENDED_AMOUNT_4	EXPENDED_YR_5	EXPENDED_AMOUNT_5;
	datalines;
197168814080 2019 1223.71 2019 2832.47
197170819072 2018 6000
197174228992 2020 45532.25 2019 8493.22 2019 656.55 2019 24455.78 2019 8499.91
197174243328
197169281024 2019 1024.01 2019 1890.14 2019 1046.24
run;

data want (drop=i);
  set have;
  array expytd {2018:2019} expenditures_ytd2018 expenditures_ytd2019 ;
  do i=2018 to 2019; expytd{i}=0; end;

  array yr    expended_yr: ;
  array amt   expended_amount: ;
  do over yr ;
    if yr in (2018,2019) then expytd{yr}=sum(expytd{yr},amt);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 18 Jan 2020 04:43:48 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2020-01-18T04:43:48Z</dc:date>
    <item>
      <title>Conditional summing Based on years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618212#M181319</link>
      <description>&lt;P&gt;I have a table that 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;EXPENDED_YR_1&lt;/TD&gt;&lt;TD&gt;EXPENDED_AMOUNT_1&lt;/TD&gt;&lt;TD&gt;EXPENDED_YR_2&lt;/TD&gt;&lt;TD&gt;EXPENDED_AMOUNT_2&lt;/TD&gt;&lt;TD&gt;EXPENDED_YR_3&lt;/TD&gt;&lt;TD&gt;EXPENDED_AMOUNT_3&lt;/TD&gt;&lt;TD&gt;EXPENDED_YR_4&lt;/TD&gt;&lt;TD&gt;EXPENDED_AMOUNT_4&lt;/TD&gt;&lt;TD&gt;EXPENDED_YR_5&lt;/TD&gt;&lt;TD&gt;EXPENDED_AMOUNT_5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197168814080&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;1223.71&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;2832.47&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;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197170819072&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;6000&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;&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;197174228992&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;45532.25&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;8493.22&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;656.55&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;24455.78&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;8499.91&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197174243328&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;&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;197169281024&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;1024.01&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;1890.14&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;TD&gt;1046.24&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;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is an unique ID number with 5 expended_year columns and 5 expended_amount columns. The numbers on the end of each column name correspond with each other. So Expended_YR_1 corresponds to Expended_amount_1,&amp;nbsp;Expended_YR_2 corresponds to Expended_amount_2, etc..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The desired output should look like this:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;ExpendituresYTD_2018&lt;/TD&gt;&lt;TD&gt;ExpendituresYTD_2019&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197168814080&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4056.18&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197170819072&lt;/TD&gt;&lt;TD&gt;6000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197174228992&lt;/TD&gt;&lt;TD&gt;45532.25&lt;/TD&gt;&lt;TD&gt;42105.46&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197174243328&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;197169281024&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3960.39&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So summing by year for each record.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your help in advance.&lt;/P&gt;</description>
      <pubDate>Fri, 17 Jan 2020 22:07:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618212#M181319</guid>
      <dc:creator>SasPerson85</dc:creator>
      <dc:date>2020-01-17T22:07:26Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional summing Based on years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618217#M181322</link>
      <description>&lt;P&gt;HI&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/182665"&gt;@SasPerson85&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can try this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines dlm="09"x;
	input ID	EXPENDED_YR_1	EXPENDED_AMOUNT_1	EXPENDED_YR_2	EXPENDED_AMOUNT_2	EXPENDED_YR_3	EXPENDED_AMOUNT_3	EXPENDED_YR_4	EXPENDED_AMOUNT_4	EXPENDED_YR_5	EXPENDED_AMOUNT_5;
	datalines;
197168814080	2019	1223.71	2019	2832.47	 	 	 	 	 	 
197170819072	2018	6000	 	 	 	 	 	 	 	 
197174228992	2020	45532.25	2019	8493.22	2019	656.55	2019	24455.78	2019	8499.91
197174243328	 	 	 	 	 	 	 	 	 	 
197169281024	2019	1024.01	2019	1890.14	2019	1046.24	 	 	 	 
	;
run;

options missing="0";

data have_exp;
	set have;
	array EXPENDED_YR_(5);
	array EXPENDED_AMOUNT_(5);
	do i=1 to 5;
		EXPENDED_YR = EXPENDED_YR_(i);
		EXPENDED_AMOUNT = EXPENDED_AMOUNT_(i);
		output;
	end;
	keep ID EXPENDED_YR EXPENDED_AMOUNT;
run;

proc means data=have_exp sum noprint missing;
	var EXPENDED_AMOUNT;
	class ID EXPENDED_YR;
	ways 2;
	output out=have_sum (drop=_type_ _freq_) sum=sum;
run;

data have_sum2;
	set have_sum;
	by ID;
	if EXPENDED_YR = . then  EXPENDED_YR = 0;
	if SUM = . then  SUM = 0;
run;

proc transpose data=have_sum2 out=want(drop=_name_ ExpendituresYTD_0) prefix=ExpendituresYTD_;
	var sum;
	by ID;
	ID EXPENDED_YR;
run;

options missing=".";&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 Jan 2020 22:55:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618217#M181322</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2020-01-17T22:55:21Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional summing Based on years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618218#M181323</link>
      <description>&lt;P&gt;There are much better ways to arrange the data, that would make processing much simpler.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;PRE&gt;ID        Year           Amount
111      2018          265.32
111      2019         1244.09
112      2018           27.22 &lt;/PRE&gt;</description>
      <pubDate>Fri, 17 Jan 2020 23:13:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618218#M181323</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2020-01-17T23:13:28Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional summing Based on years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618220#M181325</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/182665"&gt;@SasPerson85&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;Something in this vein would do:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                                                                                                                             
  input id expended_yr_1 expended_amount_1                                                                                              
           expended_yr_2 expended_amount_2                                                                                              
           expended_yr_3 expended_amount_3                                                                                              
           expended_yr_4 expended_amount_4                                                                                              
           expended_yr_5 expended_amount_5                                                                                              
  ;                                                                                                                                     
  cards ;                                                                                                                               
197168814080 2019  1223.71 2019 2832.47    .     .      .      .      .     .                                                           
197170819072 2018  6000       .     .      .     .      .      .      .     .                                                           
197174228992 2018 45532.25 2019 8493.22 2019  656.55 2019 24455.78 2019 8499.91                                                         
197174243328    .      .      .     .      .     .      .      .      .     .                                                           
197169281024 2019  1024.01 2019 1890.14 2019 1046.24    .      .      .     .                                                           
;                                                                                                                                       
run ;                                                                                                                                   
                                                                                                                                        
data want (keep = id expenditure:) ;                                                                                                    
  set have ;                                                                                                                            
  array yr expended_yr: ;                                                                                                               
  array am expended_am: ;                                                                                                               
  expendituresytd_2018 = 0 ;                                                                                                            
  expendituresytd_2019 = 0 ;                                                                                                            
  do over yr ;                                                                                                                          
    if      yr = 2018 then expendituresytd_2018 + am ;                                                                                  
    else if yr = 2019 then expendituresytd_2019 + am ;                                                                                  
  end ;                                                                                                                                 
run ;                                                    
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 Jan 2020 23:25:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618220#M181325</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2020-01-17T23:25:11Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional summing Based on years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618223#M181328</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;

data have;
infile cards truncover;
input ID :$20.	EXPENDED_YR_1	EXPENDED_AMOUNT_1	EXPENDED_YR_2	EXPENDED_AMOUNT_2	EXPENDED_YR_3	EXPENDED_AMOUNT_3	EXPENDED_YR_4	EXPENDED_AMOUNT_4	EXPENDED_YR_5	EXPENDED_AMOUNT_5;
cards;
197168814080	2019	1223.71	2019	2832.47	 	 	 	 	 	 
197170819072	2018	6000	 	 	 	 	 	 	 	 
197174228992	2018	45532.25	2019	8493.22	2019	656.55	2019	24455.78	2019	8499.91
197174243328	 	 	 	 	 	 	 	 	 	 
197169281024	2019	1024.01	2019	1890.14	2019	1046.24	 	
; 


/*Transpose wide to long*/
data temp;
 set have;
 array t(5,2) EXPENDED_YR_1--EXPENDED_AMOUNT_5;
 do i=1 to 5 until(not year);
  year=t(i,1);
  Amt=t(i,2);
   output;
 end;
 keep id year amt;
run;
options missing='0';
proc summary data=temp  nway missing completetypes;
   class ID year;
	var amt;
	output out=temp2(where=(year ne .) drop=_type_ _freq_) sum=;
run;
proc transpose data=temp2 out=want(drop=_:) prefix=ExpendituresYTD_;
by id ;
var amt;
id year;
run;

proc print noobs;run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l header" scope="col"&gt;ID&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;ExpendituresYTD_2018&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;ExpendituresYTD_2019&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;197168814080&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="r data"&gt;4056.18&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;197169281024&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="r data"&gt;3960.39&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;197170819072&lt;/TD&gt;
&lt;TD class="r data"&gt;6000.00&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;197174228992&lt;/TD&gt;
&lt;TD class="r data"&gt;45532.25&lt;/TD&gt;
&lt;TD class="r data"&gt;42105.46&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;197174243328&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 17 Jan 2020 23:52:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618223#M181328</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-01-17T23:52:49Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional summing Based on years</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618240#M181337</link>
      <description>&lt;P&gt;You already have matching arrays of year variables (range from 2018 to 2020) and expenditure variables.&amp;nbsp; Since you want total for a subset of those years (2018,2019), this is an excellent situation to use an array (EXPYTD below) with lower bound 2018 and upper bound 2019:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines truncover;
	input ID	EXPENDED_YR_1	EXPENDED_AMOUNT_1	EXPENDED_YR_2	EXPENDED_AMOUNT_2	EXPENDED_YR_3	EXPENDED_AMOUNT_3	EXPENDED_YR_4	EXPENDED_AMOUNT_4	EXPENDED_YR_5	EXPENDED_AMOUNT_5;
	datalines;
197168814080 2019 1223.71 2019 2832.47
197170819072 2018 6000
197174228992 2020 45532.25 2019 8493.22 2019 656.55 2019 24455.78 2019 8499.91
197174243328
197169281024 2019 1024.01 2019 1890.14 2019 1046.24
run;

data want (drop=i);
  set have;
  array expytd {2018:2019} expenditures_ytd2018 expenditures_ytd2019 ;
  do i=2018 to 2019; expytd{i}=0; end;

  array yr    expended_yr: ;
  array amt   expended_amount: ;
  do over yr ;
    if yr in (2018,2019) then expytd{yr}=sum(expytd{yr},amt);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 18 Jan 2020 04:43:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-summing-Based-on-years/m-p/618240#M181337</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-01-18T04:43:48Z</dc:date>
    </item>
  </channel>
</rss>

