<?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 Kode Eksempler Fra Min Hash Object Præsentations På SAS FANS - 05/03/2021 in SAS Community Nordic</title>
    <link>https://communities.sas.com/t5/SAS-Community-Nordic/Kode-Eksempler-Fra-Min-Hash-Object-Pr%C3%A6sentations-P%C3%A5-SAS-FANS-05/m-p/724488#M348</link>
    <description>&lt;P&gt;Hej med jer.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Herunder er mine kode snippets fra min præsentation på SAS FANS fredag den 5. Marts 2021 om hash objektet i SAS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jeg har beskrevet koden overfladisk nedenfor, men kommentér gerne med spørgsmål eller kommentarer, så uddyber jeg gerne &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Simpelt Hash Objekt Lookup&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data En;
input ID;
datalines;
9  
1  
10 
3  
2  
4  
5  
8  
6  
7  
;

data To;
input ID num char $;
datalines;
8  80    Firs     
2  20    Tyve     
4  40    Fyrre    
10 100   Hundrede 
6  60    Tres     
;

data Tre;
   
   if _N_ = 1 then do;
      declare hash h(dataset : "To", hashexp : 20);   /* Deklarér hash object h med ID som key og num og char som data variable */
      h.definekey("ID");                              
      h.definedata("num", "char");
      h.definedone();
   end;

   set En;                                            /* Læs data set En sekventielt                                            */
 
   if 0 then set to;                                  /* Parameter type matching. Sikrer at num og char er i PDV                */
   call missing(num, char);                           /* Sæt num og char missing som udgangspunkt                               */

   rc = h.find();                                     /* Brug Find() Metoden til at slå num og char op på aktuel værdi af ID    */

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;At Fjerne Duplicates med Hash Objektet&lt;/STRONG&gt;&lt;/U&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   
   if _N_ = 1 then do;        /* Deklarér hash object h med age som key variabel      */
      dcl hash h();
      h.definekey('age');
      h.definedone();
   end;

   set sashelp.class;         /* Læs sashelp.class sekventielt                        */

   if h.add() = 0;            /* Hvis vi kan indsætte age i h, har vi ikke mødt denne
                                 age før, så vi outputter. Ellers outputtes ikke      */
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Akkumuleret Variabel&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;

   if _N_ = 1 then do;           /* Deklarér hash object h         */          
      dcl hash h();
      h.definekey('age');
      h.definedata('c');
      h.definedone();
   end;

   set sashelp.class;            /* Læs sashelp.class sekventialt  */

   if h.find() ne 0 then c = 1;  /* Hvis age findes i h, sæt c = 1 */
   else                  c + 1;  /* Ellers, læg 1 til c            */

   h.replace();                  /* Uanset hvad replacer vi c i h  */

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;File Splitting - Hash Of Hashes&lt;/STRONG&gt;&lt;/U&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
 
   dcl hash hh();                              /* Deklarér hash object hh                                                                   */
   hh.definekey ('age');                       /* Sæt age som key variabel                                                                  */
   hh.definedata('h', 'age');                  /* Sæt h og age som data variable. Dvs hh peger på hash objectet h                           */
   hh.definedone();                            /* Afslut deklaration af hh                                                                  */
   dcl hiter i('hh');                          /* Deklarér hash iterator objekt og link dette til hh                                        */

   do until (z);                               /* Brug DoW Loop til at læse sashelp.class sekventielt                                       */
      set sashelp.class end = z;              
      if hh.find() ne 0 then do;               /* Hvis vi ikke har mødt akutuel værdi af age før, gå ind i Do Blok                          */
         dcl hash h(dataset : 'sashelp.class(obs=0)', multidata:'Y');  /* Deklarér hash object h og tillad flere entries for samme key      */
         h.definekey('age');                   /* Sæt age som key variabel                                                                  */
         h.definedata(all : 'Y');              /* Sæt alle variable fra sashelp.class som data variable                                     */
         h.definedone();                       /* Afslut deklaration af h                                                                   */

         hh.add();                             /* Tilføj hash object instans til hh                                                         */
      end;                                     /* Do Blok slut                                                                              */
      h.add();                                 /* Uanset om vi har mødt akutuel værdi af age før peger vi nu på korrekt hash object h.  
                                                  Derfor kan vi tilføje aktuel værdi af age til h                                           */
   end;

   do while(i.next() = 0);                     /* Brug hash iterator til at iterere over alle entries i hh. Dvs over alle instanser af h    */
      h.output(dataset:cats('data_', age));    /* Output entries fra det 'aktive' hash object (Dvs det som hh peger på) til et SAS data set */
   end;                                        

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Vh Peter Clemmensen&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 08 Mar 2021 12:51:11 GMT</pubDate>
    <dc:creator>PeterClemmensen</dc:creator>
    <dc:date>2021-03-08T12:51:11Z</dc:date>
    <item>
      <title>Kode Eksempler Fra Min Hash Object Præsentations På SAS FANS - 05/03/2021</title>
      <link>https://communities.sas.com/t5/SAS-Community-Nordic/Kode-Eksempler-Fra-Min-Hash-Object-Pr%C3%A6sentations-P%C3%A5-SAS-FANS-05/m-p/724488#M348</link>
      <description>&lt;P&gt;Hej med jer.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Herunder er mine kode snippets fra min præsentation på SAS FANS fredag den 5. Marts 2021 om hash objektet i SAS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jeg har beskrevet koden overfladisk nedenfor, men kommentér gerne med spørgsmål eller kommentarer, så uddyber jeg gerne &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Simpelt Hash Objekt Lookup&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data En;
input ID;
datalines;
9  
1  
10 
3  
2  
4  
5  
8  
6  
7  
;

data To;
input ID num char $;
datalines;
8  80    Firs     
2  20    Tyve     
4  40    Fyrre    
10 100   Hundrede 
6  60    Tres     
;

data Tre;
   
   if _N_ = 1 then do;
      declare hash h(dataset : "To", hashexp : 20);   /* Deklarér hash object h med ID som key og num og char som data variable */
      h.definekey("ID");                              
      h.definedata("num", "char");
      h.definedone();
   end;

   set En;                                            /* Læs data set En sekventielt                                            */
 
   if 0 then set to;                                  /* Parameter type matching. Sikrer at num og char er i PDV                */
   call missing(num, char);                           /* Sæt num og char missing som udgangspunkt                               */

   rc = h.find();                                     /* Brug Find() Metoden til at slå num og char op på aktuel værdi af ID    */

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;At Fjerne Duplicates med Hash Objektet&lt;/STRONG&gt;&lt;/U&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   
   if _N_ = 1 then do;        /* Deklarér hash object h med age som key variabel      */
      dcl hash h();
      h.definekey('age');
      h.definedone();
   end;

   set sashelp.class;         /* Læs sashelp.class sekventielt                        */

   if h.add() = 0;            /* Hvis vi kan indsætte age i h, har vi ikke mødt denne
                                 age før, så vi outputter. Ellers outputtes ikke      */
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Akkumuleret Variabel&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;

   if _N_ = 1 then do;           /* Deklarér hash object h         */          
      dcl hash h();
      h.definekey('age');
      h.definedata('c');
      h.definedone();
   end;

   set sashelp.class;            /* Læs sashelp.class sekventialt  */

   if h.find() ne 0 then c = 1;  /* Hvis age findes i h, sæt c = 1 */
   else                  c + 1;  /* Ellers, læg 1 til c            */

   h.replace();                  /* Uanset hvad replacer vi c i h  */

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;File Splitting - Hash Of Hashes&lt;/STRONG&gt;&lt;/U&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
 
   dcl hash hh();                              /* Deklarér hash object hh                                                                   */
   hh.definekey ('age');                       /* Sæt age som key variabel                                                                  */
   hh.definedata('h', 'age');                  /* Sæt h og age som data variable. Dvs hh peger på hash objectet h                           */
   hh.definedone();                            /* Afslut deklaration af hh                                                                  */
   dcl hiter i('hh');                          /* Deklarér hash iterator objekt og link dette til hh                                        */

   do until (z);                               /* Brug DoW Loop til at læse sashelp.class sekventielt                                       */
      set sashelp.class end = z;              
      if hh.find() ne 0 then do;               /* Hvis vi ikke har mødt akutuel værdi af age før, gå ind i Do Blok                          */
         dcl hash h(dataset : 'sashelp.class(obs=0)', multidata:'Y');  /* Deklarér hash object h og tillad flere entries for samme key      */
         h.definekey('age');                   /* Sæt age som key variabel                                                                  */
         h.definedata(all : 'Y');              /* Sæt alle variable fra sashelp.class som data variable                                     */
         h.definedone();                       /* Afslut deklaration af h                                                                   */

         hh.add();                             /* Tilføj hash object instans til hh                                                         */
      end;                                     /* Do Blok slut                                                                              */
      h.add();                                 /* Uanset om vi har mødt akutuel værdi af age før peger vi nu på korrekt hash object h.  
                                                  Derfor kan vi tilføje aktuel værdi af age til h                                           */
   end;

   do while(i.next() = 0);                     /* Brug hash iterator til at iterere over alle entries i hh. Dvs over alle instanser af h    */
      h.output(dataset:cats('data_', age));    /* Output entries fra det 'aktive' hash object (Dvs det som hh peger på) til et SAS data set */
   end;                                        

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Vh Peter Clemmensen&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 08 Mar 2021 12:51:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Community-Nordic/Kode-Eksempler-Fra-Min-Hash-Object-Pr%C3%A6sentations-P%C3%A5-SAS-FANS-05/m-p/724488#M348</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2021-03-08T12:51:11Z</dc:date>
    </item>
  </channel>
</rss>

