<?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>Thema "Betreff: Anonymisierung der Kennnummer" in CoDe SAS German</title>
    <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576534#M2563</link>
    <description>&lt;P&gt;Beim Versuch das zu implementieren ist mir aufgefallen, dass es doch ein wenig komplizierter wird als im ersten Anlauf gedacht.&lt;/P&gt;
&lt;P&gt;Von daher ignorier meinen Einwand falls Du nicht bei jedem Lauf das Gleiche Ergebnis brauchst.&lt;/P&gt;</description>
    <pubDate>Thu, 25 Jul 2019 11:29:54 GMT</pubDate>
    <dc:creator>Christine2</dc:creator>
    <dc:date>2019-07-25T11:29:54Z</dc:date>
    <item>
      <title>Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576483#M2557</link>
      <description>&lt;P&gt;Hallo zusammen,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;mein Datensatz sieht folgendermaßen aus:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kennnummer&lt;/P&gt;
&lt;P&gt;2541212354&lt;BR /&gt;215454865&lt;BR /&gt;1356898&lt;BR /&gt;35415sto54545&lt;BR /&gt;35415sto54545&lt;BR /&gt;35415sto54545&lt;BR /&gt;52s4121s21&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Diese Variable ist alphanumerisch und kann bis zu 25 Stellen lang sein.&lt;/P&gt;
&lt;P&gt;Die Kennnummer soll nun in ein 8-stelliges numerisches Feld umgewandelt werden. Dazu möchte ich die Datensätze von 1 an durchnummerieren. Da die gleiche Kennnummer mehrfach vorkommen kann, sollten diese natürlich die gleiche anonymisierte Kennnummer bekommen.&lt;/P&gt;
&lt;P&gt;Das Ergebnis des Beispiels sollte so aussehen:&lt;/P&gt;
&lt;P&gt;Kennnummer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnonymeKennnnummer&lt;/P&gt;
&lt;P&gt;2541212354&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;215454865&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;1356898&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;35415sto54545&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;35415sto54545&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;35415sto54545&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;52s4121s21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Vielen Dank für Eure Mühen im Voraus.&lt;/P&gt;
&lt;P&gt;Viele Grüße&lt;/P&gt;
&lt;P&gt;Katrin&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 07:33:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576483#M2557</guid>
      <dc:creator>Katrin11</dc:creator>
      <dc:date>2019-07-25T07:33:56Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576484#M2558</link>
      <description>&lt;P&gt;Sortiere den Datensatz nach Kennnummer.&lt;/P&gt;
&lt;P&gt;Dann in einem data step benutze syntax wie:&lt;/P&gt;
&lt;PRE&gt;.....
by kennnummer;
retain anonyme_kennnummer;
if first kennnummer then anonyme_kennnummer+1;
....&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 07:58:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576484#M2558</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2019-07-25T07:58:01Z</dc:date>
    </item>
    <item>
      <title>Re: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576486#M2559</link>
      <description>&lt;P&gt;+1 Weil ich den Reply-Button verfehlt habe &lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Wenn du die Daten nicht sortieren kannst/willst könnte auch dieses Problem mit einem Hash-Objekt oder einem Format gelöst werden.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data annonym;
   set basis;

   length AnonymeKennnnummer naechsteNr 8;
   retain naechsteNr 1;
   drop naechsteNr;

   if _n_ = 1 then do;
      declare hash h();
      h.defineKey('Kennnummer');
      h.defineData('AnonymeKennnnummer');
      h.defineDone();
   end;

   if h.find() ^= 0 then do;
      AnonymeKennnnummer = naechsteNr;
      naechsteNr = naechsteNr + 1;
      h.Add();
   end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Und, ja, ich würde eher den Vorschlag von &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/12447"&gt;@Patrick&lt;/a&gt; umsetzen.&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 07:48:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576486#M2559</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2019-07-25T07:48:34Z</dc:date>
    </item>
    <item>
      <title>Re: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576489#M2560</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/15475"&gt;@andreas_lds&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Und hier als eine Variante:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data annonym;
  set basis;
  length AnonymeKennnnummer 8;

  if _n_ = 1 then
    do;
      declare hash h();
      h.defineKey('Kennnummer');
      h.defineData('AnonymeKennnnummer');
      h.defineDone();
    end;

  if h.find() ^= 0 then
    do;
      AnonymeKennnnummer= h.num_items + 1;
      h.Add();
    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 25 Jul 2019 07:56:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576489#M2560</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2019-07-25T07:56:17Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576490#M2561</link>
      <description>&lt;P&gt;Oder man baut ein Informat:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input kennnummer $25.;
datalines;
2541212354
215454865
1356898
35415sto54545
35415sto54545
35415sto54545
52s4121s21
;

proc sort
  data=have
  out=sorted (rename=(kennnummer=start))
  nodupkey
;
by kennnummer;
run;

data cntlin;
set sorted;
retain
  type 'I'
  fmtname 'kennnummer'
;
label = _N_;
run;

proc format cntlin=cntlin;
run;

data want;
set have;
anonym = input(kennnummer,kennnummer.);
run;

proc print data=want noobs;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Ergebnis:&lt;/P&gt;
&lt;PRE&gt;kennnummer       anonym

2541212354          3  
215454865           2  
1356898             1  
35415sto54545       4  
35415sto54545       4  
35415sto54545       4  
52s4121s21          5  
&lt;/PRE&gt;</description>
      <pubDate>Thu, 25 Jul 2019 08:00:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576490#M2561</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-07-25T08:00:05Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576532#M2562</link>
      <description>&lt;P&gt;Hallo Katrin,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;musst Du die anonyme Kennnummer nur einmalig vergeben oder öfter?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Wenn Du z.B. heute einen Satz mit Kennnummern bekommst und morgen einen neuen Satz mit Kennnummern bekommst, sollen dann die anonymisierten Kennnummern auch eindeutig sein?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Falls ja bietet es sich an, dass Du Dir die Übersetzungstabelle abspeicherst. Mit deiner Kennnummer kannst Du dann nachschauen, ob Du schon eine Übersetzung kennst und die liefern. Ansonsten zählst Du das Maximum um 1 hoch, trägst es in die Tabelle ein und lieferst das Ergebnis.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sobald ich meinen Gedanken mal gecoded habe poste ich Dir auch das Beispiel hier.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Schönen Gruß&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Christine&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 11:17:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576532#M2562</guid>
      <dc:creator>Christine2</dc:creator>
      <dc:date>2019-07-25T11:17:10Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576534#M2563</link>
      <description>&lt;P&gt;Beim Versuch das zu implementieren ist mir aufgefallen, dass es doch ein wenig komplizierter wird als im ersten Anlauf gedacht.&lt;/P&gt;
&lt;P&gt;Von daher ignorier meinen Einwand falls Du nicht bei jedem Lauf das Gleiche Ergebnis brauchst.&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 11:29:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576534#M2563</guid>
      <dc:creator>Christine2</dc:creator>
      <dc:date>2019-07-25T11:29:54Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576538#M2564</link>
      <description>&lt;P&gt;Zur Vollständigkeit aber doch noch der Code, leider quick und dirty:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input kennnummer $25.;
datalines;
2541212354
215454865
1356898
35415sto54545
35415sto54545
35415sto54545
52s4121s21
;

data bekannt;
	length kennnummer $25 anonyme_id 8;
	stop;
run;

proc sort data=have out=have_tmp nodupkey;
	by kennnummer;
run;


proc sql;
	create table fehlen as 
	select a.kennnummer 
	from have_tmp a left join 
		   bekannt b
	on a.kennnummer = b.kennnummer and b.kennnummer = ' ';
quit;

data bekannt(drop= id_max);
	set bekannt (in=a)
			fehlen (in=b);
	retain id_max 0;
	if a then do;
		id_max = anonyme_id;
	end;
	if b then do;
		id_max +1;
		anonyme_id = id_max;
	end;
run;

data Daten_mit_Kennung(drop= rc);
	set have;

	if _N_ = 0 then 
		set bekannt;
	if _N_ = 1 then do;
		declare hash h(dataset:'bekannt');
		rc = h.defineKey('Kennnummer');
		rc = h.defineData('anonyme_id');
		rc = h.defineDone();
	end;

	rc = h.find();
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 25 Jul 2019 11:40:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576538#M2564</guid>
      <dc:creator>Christine2</dc:creator>
      <dc:date>2019-07-25T11:40:13Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576544#M2565</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/187300"&gt;@Christine2&lt;/a&gt;&amp;nbsp; schrieb:&lt;BR /&gt;
&lt;P&gt;Beim Versuch das zu implementieren ist mir aufgefallen, dass es doch ein wenig komplizierter wird als im ersten Anlauf gedacht.&lt;/P&gt;
&lt;P&gt;Von daher ignorier meinen Einwand falls Du nicht bei jedem Lauf das Gleiche Ergebnis brauchst.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Nicht getestet sollte aber funktionieren fuer mehrfache Laeufe.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro uebersetzung(tabelle);
  %if (%eval(%sysfunc(exist(&amp;amp;tabelle, DATA)) eq 0) %then
    %do;
      /* if table does not exist  */
      data &amp;amp;tabelle;
        stop;
        set basis(keep=Kennnummer);
        length AnonymeKennnnummer 8;
        format AnonymeKennnnummer 32.;
      run;

    %end;
%mend;
%uebersetzung(work.AnonymeKennnnummern);

data annonym;

  set basis end=last;

  if _n_ = 1 then
    do;
      if 0 then set work.AnonymeKennnnummern;
      declare hash h(dataset:'work.AnonymeKennnnummern');
      h.defineKey('Kennnummer');
      h.defineData('AnonymeKennnnummer');
      h.defineDone();
    end;

  if h.find() ^= 0 then
    do;
      AnonymeKennnnummer= h.num_items + 1;
      h.Add();
    end;

  if last then
    h.output(dataset:'work.AnonymeKennnnummern');
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 25 Jul 2019 11:53:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576544#M2565</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2019-07-25T11:53:18Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576555#M2566</link>
      <description>&lt;P&gt;Ich merke immer wieder, dass ich Hashs noch mehr einsetzen sollte als bislang.&lt;/P&gt;
&lt;P&gt;Danke&lt;/P&gt;
&lt;P&gt;Christine&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 12:34:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576555#M2566</guid>
      <dc:creator>Christine2</dc:creator>
      <dc:date>2019-07-25T12:34:05Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576559#M2567</link>
      <description>&lt;P&gt;Maxim 51.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 12:44:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576559#M2567</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-07-25T12:44:24Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576657#M2568</link>
      <description>&lt;P&gt;Mein klarer Favorit ist Maxim 52&amp;nbsp;&amp;nbsp;&lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley (fröhlich)" title="Smiley (fröhlich)" /&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 25 Jul 2019 15:33:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/576657#M2568</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2019-07-25T15:33:12Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577133#M2569</link>
      <description>&lt;P&gt;Hier stellt sich mir die Frage, inwieweit wirklich "anonymisiert" wird, bzw. werden soll.&lt;/P&gt;
&lt;P&gt;Meiner Ansicht nach wird durch die Vergabe einer neuen Nummer lediglich pseudonymisiert.&lt;/P&gt;
&lt;P&gt;Interessant wäre auch, wie der neue Wert weiter verwendet werden soll; also ob Lesbarkeit, Plattenplatz beim Speichern, Performance bei weiteren Joins, etc. eine Rolle spielt.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ggf. reicht ansonsten einfach ein Hash (MD5, SHA256, ...)?!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
pseudo_kennnummer = sha256(kennnummer);
/* format pseudo_kennnummer $hex64.; */
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":zwinkerndes_Gesicht:"&gt;😉&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jul 2019 07:31:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577133#M2569</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2019-07-27T07:31:34Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577134#M2570</link>
      <description>&lt;P&gt;Die momentan beste und "deppensicherste" Methode ist es (IMO), eine UUID zu verwenden. Das braucht 16 Bytes Speicherplatz und sorgt mit ziemlicher Sicherheit (weil Kennzeichen des generierenden Computers eingearbeitet werden) für weltweite Eindeutigkeit.&lt;/P&gt;
&lt;P&gt;Man kann aber auch in einer Zahl mit 8 Byte Timestamps mit Genauigkeit auf Mikrosekunden-Ebene speichern, das haben die Datenbanken vor der Einführung der UUID als Keys verwendet.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Wenn es um Platz geht, kann man aber einfach eine laufende Nummer verwenden, und die Länge der Variablen nach der erwarteten maximalen Anzahl wählen, das ist dann wohl am effizientesten.&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jul 2019 07:55:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577134#M2570</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-07-27T07:55:47Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577137#M2571</link>
      <description>&lt;P&gt;Guter Hinweis mit der UUID!&lt;/P&gt;
&lt;P&gt;So wie ich verstanden hatte, kommen die Kennnummern auch mehrfach im Dataset vor. Daher war mein Gedankengang, dass man mit einer Hash-Funktion ohne Sortierung in einem Dataset immer die gleiche Ergebnisvariable erhält. Da würde normalerweise auch ein Hash-Objekt ausreichen, allerdings liefert die Hash-Funktion auch bei weiteren Datasets mit der gleichen Kennnummer das gleiche Ergebnis ohne zusätzliche Verarbeitungsschritte.&lt;/P&gt;
&lt;P&gt;Wie gesagt, kommt es aus meiner Sicht auf die weitere Verwendung an, welche Methode idealerweise gewählt wird.&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jul 2019 08:42:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577137#M2571</guid>
      <dc:creator>mfab</dc:creator>
      <dc:date>2019-07-27T08:42:52Z</dc:date>
    </item>
    <item>
      <title>Betreff: Anonymisierung der Kennnummer</title>
      <link>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577304#M2572</link>
      <description>&lt;P&gt;Grundsätzlich muss unterschieden werden zwischen Anonymisierung und Pseudonymisierung.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Für die definitive Anonymisierung wird meistens die Verwendung von Einwegverfahren verwendet.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Auf älteren SAS-Versionen kann z.B. diesbezüglich das MD5-Verfahren&amp;nbsp;verwenden bzw. auf neueren SAS-Versionen z.B. SHA256-Verfahren.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Da die Krypto-Einwegverfahren für&amp;nbsp;denselben Klartextwert (z.B.&amp;nbsp;Kennzahl, Steuernummer usw.)&amp;nbsp;auf allen Systemen immer dasselbe Krypto-Ergebnis liefern, empfehle ich zum Klartextwert ein Passwort als Wert hinzuzufügen.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Das Passwort darf nicht hardcoded bzw. in Klartext im SAS-Code aufscheinen bzw. über das SAS-Programm direkt einsehbar sein und darf auch nicht im SAS-LOG aufscheinen.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Dies kann man z.B. erreichen durch Verwendung von Secure-Protected-Macros bzw. durch Abfrage des Passwortes über ein Eingabefenster zur Laufzeit des SAS-Programmes usw. und durch Deaktivierung und Aktivierung einiger SAS-Systemvariablen für das SAS-Log.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Z.B.:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;set_off_option_pw&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; %global sav_symbolgen sav_macrogen;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; %let sav_symbolgen=%sysfunc(getoption(symbolgen));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; %let sav_macrogen=%sysfunc(getoption(macrogen));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; options nosymbolgen NOMACROGEN;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%mend&lt;/STRONG&gt; set_off_option_pw;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;set_on_option_pw&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;options &amp;amp;sav_symbolgen &amp;amp;sav_macrogen;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%mend&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;set_on_option_pw;&lt;/P&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;/*Beispiel Secure-Macro zum Lesen der Passwörter*/&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt; read_pw()/store secure DES="Lese Passwort";&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;options nonotes nomlogic nomprint nosymbolgen nosource nosource2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*SAS-Code – Passwort kann z.B. aus einer passwortgeschützten SAS-Datei gelesen werden und mit PWENCODE zusätzlich kryptografiert werden usw.*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%mend;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Für die Anonymisierung kann man z.B. MD5 bzw. besser SHA256 zusammen mit einem Passwort verwenden:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*PS.: Das Passwort sollte im SAS-Hauptprogramm nicht ungeschützt kodiert sein.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Nachfolgender Code gilt daher&amp;nbsp;nur als Beispiel:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*proc pwencode in='Passwort1';*/&lt;/P&gt;
&lt;P&gt;/*run;*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%global pw_passwort;&lt;/P&gt;
&lt;P&gt;%let pw_passwort = {sas002}6FE4B62647E0E59721B8CAD454D1AD9D;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;length ano_kennnummer $32;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;set have;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;ano_kennnummer =put(md5(cat("&amp;amp;pw_passwort.",kennnummer)),$hex32.);&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":leicht_lächelndes_Gesicht:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 29 Jul 2019 07:58:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/CoDe-SAS-German/Anonymisierung-der-Kennnummer/m-p/577304#M2572</guid>
      <dc:creator>MarkusPriller</dc:creator>
      <dc:date>2019-07-29T07:58:22Z</dc:date>
    </item>
  </channel>
</rss>

