<?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: Map and Aggregate Data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620653#M182404</link>
    <description>If you run the PROC MEANS it will combine up the region_codes, ie 123001 but it doesn't know that that region_code means East. I suggest adding another format for that but you'll still need to apply it in a second step with the PROC MEANS approach but its pretty simple IMO.</description>
    <pubDate>Tue, 28 Jan 2020 20:43:38 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2020-01-28T20:43:38Z</dc:date>
    <item>
      <title>Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620322#M182254</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I would like to link and aggregate records (over 10 million) in a dataset to another dataset. Is there a way to achieve this in one task? Thank you&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data 1 - what I have&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;City&lt;/TD&gt;&lt;TD&gt;City_Code&lt;/TD&gt;&lt;TD&gt;Item 1&lt;/TD&gt;&lt;TD&gt;Item 2&lt;/TD&gt;&lt;TD&gt;Item 3&lt;/TD&gt;&lt;TD&gt;Item 4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City A&lt;/TD&gt;&lt;TD&gt;123001001&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City B&lt;/TD&gt;&lt;TD&gt;123001002&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City C&lt;/TD&gt;&lt;TD&gt;123002001&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;60&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City D&lt;/TD&gt;&lt;TD&gt;123002002&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;60&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City E&lt;/TD&gt;&lt;TD&gt;123003001&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;60&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City F&lt;/TD&gt;&lt;TD&gt;123003002&lt;/TD&gt;&lt;TD&gt;60&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;TD&gt;90&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City G&lt;/TD&gt;&lt;TD&gt;123004001&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;TD&gt;90&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;City H&lt;/TD&gt;&lt;TD&gt;123004002&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;TD&gt;90&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;110&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data 2 - what I want (the region code forms the beginning part of the city code)&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Region&lt;/TD&gt;&lt;TD&gt;Region_Code&lt;/TD&gt;&lt;TD&gt;Item 1&lt;/TD&gt;&lt;TD&gt;Item 2&lt;/TD&gt;&lt;TD&gt;Item 3&lt;/TD&gt;&lt;TD&gt;Item 4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;North&lt;/TD&gt;&lt;TD&gt;123001&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;90&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;South&lt;/TD&gt;&lt;TD&gt;123002&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;90&lt;/TD&gt;&lt;TD&gt;110&lt;/TD&gt;&lt;TD&gt;130&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;East&lt;/TD&gt;&lt;TD&gt;123003&lt;/TD&gt;&lt;TD&gt;110&lt;/TD&gt;&lt;TD&gt;130&lt;/TD&gt;&lt;TD&gt;150&lt;/TD&gt;&lt;TD&gt;170&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;West&lt;/TD&gt;&lt;TD&gt;123004&lt;/TD&gt;&lt;TD&gt;150&lt;/TD&gt;&lt;TD&gt;170&lt;/TD&gt;&lt;TD&gt;190&lt;/TD&gt;&lt;TD&gt;210&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 27 Jan 2020 20:28:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620322#M182254</guid>
      <dc:creator>michokwu</dc:creator>
      <dc:date>2020-01-27T20:28:39Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620337#M182266</link>
      <description>You can do it quite easily in two steps. &lt;BR /&gt;&lt;BR /&gt;This assumes that Region_Code is character.&lt;BR /&gt;&lt;BR /&gt;proc means data=have SUM stackODS;&lt;BR /&gt;class city_code;&lt;BR /&gt;format city_code 6.; *uses only 6 characters for grouping, very important here;&lt;BR /&gt;var item1-item4;&lt;BR /&gt;ods output summary = want1;&lt;BR /&gt;output out=want2 sum= / autoname;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;Now apply the Region name to the data. &lt;BR /&gt;&lt;BR /&gt;Or you can do it via one SQL pass but it's more complicated IMO. &lt;BR /&gt;&lt;BR /&gt;proc sql;&lt;BR /&gt;create table want3 as&lt;BR /&gt;select substr(region_code, 1, 6) as region_code, put(region_code, $region_fmt.) as region, sum(item1) as item1, sum(item2) as item2, sum(item3) as item3, sum(item4) as item4&lt;BR /&gt;from have&lt;BR /&gt;group by calculated region_code;&lt;BR /&gt;quit;</description>
      <pubDate>Mon, 27 Jan 2020 20:47:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620337#M182266</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-01-27T20:47:59Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620403#M182297</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/255120"&gt;@michokwu&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SQL is perhaps the best (or at least simplest) option:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data city ;                                                                                                                                                                                                                                                     
  input @1 City $6. City_Code:$9. Item1-item4 ;                                                                                                                                                                                                                 
  cards ;                                                                                                                                                                                                                                                       
City A  123001001  10  20   30   40                                                                                                                                                                                                                             
City B  123001002  20  30   40   50                                                                                                                                                                                                                             
City C  123002001  30  40   50   60                                                                                                                                                                                                                             
City D  123002002  40  50   60   70                                                                                                                                                                                                                             
City E  123003001  50  60   70   80                                                                                                                                                                                                                             
City F  123003002  60  70   80   90                                                                                                                                                                                                                             
City G  123004001  70  80   90  100                                                                                                                                                                                                                             
City H  123004002  80  90  100  110                                                                                                                                                                                                                             
;                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                
data region ;                                                                                                                                                                                                                                                   
  input Region $ Region_Code:$6. ;                                                                                                                                                                                                                              
  cards ;                                                                                                                                                                                                                                                       
North  123001                                                                                                                                                                                                                                                   
South  123002                                                                                                                                                                                                                                                   
East   123003                                                                                                                                                                                                                                                   
West   123004                                                                                                                                                                                                                                                   
;                                                                                                                                                                                                                                                               
run ;                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                
proc sql ;                                                                                                                                                                                                                                                      
  create table want as                                                                                                                                                                                                                                          
  select region                                                                                                                                                                                                                                                 
       , region_code                                                                                                                                                                                                                                            
       , sum (item1) as item1                                                                                                                                                                                                                                   
       , sum (item2) as item2                                                                                                                                                                                                                                   
       , sum (item3) as item3                                                                                                                                                                                                                                   
       , sum (item4) as item4                                                                                                                                                                                                                                   
  from   city, region                                                                                                                                                                                                                                           
  where  region_code = put (city_code, $6.)                                                                                                                                                                                                                     
  group  1, 2                                                                                                                                                                                                                                                   
  order  2                                                                                                                                                                                                                                                      
  ;                                                                                                                                                                                                                                                             
quit ;                   
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you loathe to list all the items as above, especially if there are way many than 4, heed what &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&amp;nbsp;has said. It can be done in a single DATA step, too (i.e. without listing all the items), using the hash object; but if you see the requisite code, you'll sure appreciate the simplicity of SQL:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_ ;                                                                                                                                                                                                                                                   
  if _n_ = 1 then do ;                                                                                                                                                                                                                                          
    if 0 then set region city ;                                                                                                                                                                                                                                 
    array it item: ;                                                                                                                                                                                                                                            
    dcl hash h (ordered:"a") ;                                                                                                                                                                                                                                  
    h.definekey ("region_code") ;                                                                                                                                                                                                                               
    h.definedata ("region", "region_code") ;                                                                                                                                                                                                                    
    do over it ;                                                                                                                                                                                                                                                
      h.definedata (vname (it)) ;                                                                                                                                                                                                                               
    end ;                                                                                                                                                                                                                                                       
    h.definedone() ;                                                                                                                                                                                                                                            
    do until (lr) ;                                                                                                                                                                                                                                             
      set region end = lr ;                                                                                                                                                                                                                                     
      h.add() ;                                                                                                                                                                                                                                                 
    end ;                                                                                                                                                                                                                                                       
  end ;                                                                                                                                                                                                                                                         
  set city (rename=(item1-item4=_it1-_it4)) end = lc ;                                                                                                                                                                                                          
  array _it _it: ;                                                                                                                                                                                                                                              
  region_code = put (city_code, $6.) ;                                                                                                                                                                                                                          
  if h.find() ne 0 then call missing (of item:) ;                                                                                                                                                                                                               
  do over it ;                                                                                                                                                                                                                                                  
    it + _it ;                                                                                                                                                                                                                                                  
  end ;                                                                                                                                                                                                                                                         
  h.replace() ;                                                                                                                                                                                                                                                 
  if lc then h.output (dataset:"want") ;                                                                                                                                                                                                                        
run ;                  
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;OTOH, instead of listing all the sum(item1) as item1, ... in the SQL query, you can auto-construct a macro variable containing the necessary text:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_ ;                                                                                                                                                                                                                                                   
  length sumit $ 32767 ;                                                                                                                                                                                                                                        
  do i = 1 to 4 ;                                                                                                                                                                                                                                               
    sumit = catx (",", sumit, cats ("sum(item", i, ") as item", i)) ;                                                                                                                                                                                           
  end ;                                                                                                                                                                                                                                                         
  call symputx ("sumit", sumit) ;                                                                                                                                                                                                                               
run ;                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                
proc sql ;                                                                                                                                                                                                                                                      
  create table want as                                                                                                                                                                                                                                          
  select region                                                                                                                                                                                                                                                 
       , region_code                                                                                                                                                                                                                                            
       , &amp;amp;sumit                                                                                                                                                                                                                                                 
  from   city, region                                                                                                                                                                                                                                           
  where  region_code = put (city_code, $6.)                                                                                                                                                                                                                     
  group  1, 2                                                                                                                                                                                                                                                   
  order  2                                                                                                                                                                                                                                                      
  ;                                                                                                                                                                                                                                                             
quit ;             
&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>Mon, 27 Jan 2020 23:56:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620403#M182297</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2020-01-27T23:56:08Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620646#M182400</link>
      <description>&lt;P&gt;Thank you Reeza.&lt;/P&gt;&lt;P&gt;Please can you clarify '&lt;SPAN&gt;Now apply the Region name to the data'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Jan 2020 20:25:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620646#M182400</guid>
      <dc:creator>michokwu</dc:creator>
      <dc:date>2020-01-28T20:25:15Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620653#M182404</link>
      <description>If you run the PROC MEANS it will combine up the region_codes, ie 123001 but it doesn't know that that region_code means East. I suggest adding another format for that but you'll still need to apply it in a second step with the PROC MEANS approach but its pretty simple IMO.</description>
      <pubDate>Tue, 28 Jan 2020 20:43:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620653#M182404</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-01-28T20:43:38Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620991#M182508</link>
      <description>&lt;P&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;I&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;can't&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;seem&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;to&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;format&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;the&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;city&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;code,&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;even&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;though&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;the&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;format&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;contains&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;fewer&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;characters,&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;when&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;I&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;run&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;the&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;program&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;it&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;retains&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;the&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;region&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="word"&gt;&lt;SPAN&gt;code. The codes are numeric&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jan 2020 21:06:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/620991#M182508</guid>
      <dc:creator>michokwu</dc:creator>
      <dc:date>2020-01-29T21:06:39Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/621549#M182712</link>
      <description>&lt;P&gt;Thanks Reeza,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also had to transpose the output into the format I preferred.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 31 Jan 2020 20:55:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/621549#M182712</guid>
      <dc:creator>michokwu</dc:creator>
      <dc:date>2020-01-31T20:55:05Z</dc:date>
    </item>
    <item>
      <title>Re: Map and Aggregate Data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/621856#M182880</link>
      <description>You may not want the STACKODS option on PROC MEANS then, that changes how the output is structured.</description>
      <pubDate>Mon, 03 Feb 2020 04:35:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Map-and-Aggregate-Data/m-p/621856#M182880</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-02-03T04:35:27Z</dc:date>
    </item>
  </channel>
</rss>

