SAS2PYTHON - Dubletten markieren


Posted on 31 January 2023 at 17:30 by Stefan Weingaertner

In der Episode 43 unseres heutigen Blog-Beitrags zeigen wir, wie man in SAS/BASE und in Pandas die erste oder letzte Zeile einer Duplette (mehrfache Ausprägungen innerhalb einer oder mehrerer Spalten) identifizieren und markieren kann.



Ein Pandas DataFrame ist einem SAS Data Set sehr ähnlich - es handelt sich um eine zweidimensionale tabellarische Datenstruktur mit gelabelten Spalten, die von unterschiedlichem Datentyp sein können. Wie in diesem Beitrag gezeigt wird, kann nahezu jede Operation, die mit dem SAS Data Step auf einen Datensatz angewendet werden kann, auch in Pandas ausgeführt werden.

Input: Unsere Input-Tabelle besitzt 6 Datensätze und besteht aus den Spalten "Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width" und "Class".


                                                                                        
Sepal_Length  Sepal_Width  Petal_Length  Petal_Width           Class
         5.1          3.5           1.4          0.2  Iris-virginica
         4.9          3.0           1.4          0.2  Iris-virginica
         4.7          3.2           1.3          0.2  Iris-virginica
         4.6          3.1           1.5          0.2     Iris-setosa
         5.0          3.6           1.4          0.2     Iris-setosa
         6.7          3.0           5.2          2.3     Iris-setosa
                    



Output: Wir generieren eine neue Tabelle, in der die Datensätze markiert sind, die eine Duplette enthalten. Dabei erhält die sogenannte Kopfduplette den Wert 1 bzw. "False", wohingegen die anderen Ausprägungen den Wert 0 bzw. "True" erhalten:

  • Jeweils ein Beispiel, wo die erste Ausprägung einer Duplette als Kopfduplette markiert wird (1 bzw. "False"), alle anderen Datensätze erhalten den Wert 0 bzw. "True".
  • Jeweils ein Beispiel, wo die letzte Ausprägung einer Duplette als Kopfduplette markiert wird (1 bzw. "False"), alle anderen Datensätze erhalten den Wert 0 bzw. "True".

Da manche Operationen in SAS und Python unterschiedlich ausgeführt werden, generieren die beiden Programmiersprachen auch leicht unterschiedlichen Ausgabe-Formate. Wir haben daher die Outputs mit dem dazugehörigen Code für SAS und Python separat aufgeführt.




SAS-Code: Die Identifizierung und Markierung einer Kopfduplette (erster Datensatz innerhalb von mehrfachen Ausprägungen) würde man in SAS wie folgt implementieren (das SAS Data Set sollte vorher nach der entsprechende(n) Spalte(n) sortiert sein).


                                            
data df;
  set df;
   by Class;
    First = first.Class;
run;
                    


SAS-Output: Das Ergebnis sieht in SAS wie folgt aus, dem SAS Data Set wird eine neue Spalte hinzugefügt. Dabei erhält der erste Datensatz innerhalb der mehrfachen Ausprägungen den Wert "First = 1".


                                                                                        
Obs  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width           Class  First
  1          5.1          3.5           1.4          0.2   Iris-virginica      1
  2          4.9          3.0           1.4          0.2   Iris-virginica      0
  3          4.7          3.2           1.3          0.2   Iris-virginica      0
  4          4.6          3.1           1.5          0.2      Iris-setosa      1
  5          5.0          3.6           1.4          0.2      Iris-setosa      0
  6          6.7          3.0           5.2          2.3      Iris-setosa      0                 
                    

SAS-Code: Die Identifizierung einer Kopfduplette (letzter Datensatz innerhalb der mehrfachen Ausprägungen) würde man in SAS wie folgt implementieren.


                                            
data df;
  set df;
   by Class;
    Last = last.Class;
run;         
                    


SAS-Output: Das Ergebnis sieht in SAS wie folgt aus, dem SAS Data Set wird eine neue Spalte hinzugefügt. Dabei erhält der letzte Datensatz innerhalb der mehrfachen Ausprägungen den Wert "Last = 1".


                                                                                        
Obs  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width           Class   Last
  1          5.1          3.5           1.4          0.2   Iris-virginica      0
  2          4.9          3.0           1.4          0.2   Iris-virginica      0
  3          4.7          3.2           1.3          0.2   Iris-virginica      1
  4          4.6          3.1           1.5          0.2      Iris-setosa      0
  5          5.0          3.6           1.4          0.2      Iris-setosa      0
  6          6.7          3.0           5.2          2.3      Iris-setosa      1
                    




Python-Code: In Python würde man die Identifizierung und Markierung der Kopfduplette (erster Datensatz innerhalb von mehrfachen Ausprägungen) für ein Pandas Dataframe "df" mit der folgenden Syntax umsetzen (das Pandas Dataframe sollte vorher nach der entsprechende(n) Spalte(n) sortiert sein).


                                         
import pandas as pd

df['First'] = df.duplicated('Class', 'first')
                    


Python-Output: Das Ergebnis sieht in Pandas wie folgt aus, dem Pandas Dataframe wird eine neue Spalte hinzugefügt. Dabei erhält der erste Datensatz innerhalb von mehrfachen Ausprägungen den Wert "First = False".


                                                                                       
  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width            Class   First
0          5.1          3.5           1.4          0.2   Iris-virginica   False
1          4.9          3.0           1.4          0.2   Iris-virginica    True
2          4.7          3.2           1.3          0.2   Iris-virginica    True
3          4.6          3.1           1.5          0.2      Iris-setosa   False
4          5.0          3.6           1.4          0.2      Iris-setosa    True
5          6.7          3.0           5.2          2.3      Iris-setosa    True
                    


Python-Code: In Python würde man die Identifizierung und Markierung der Kopfduplette (letzter Datensatz innerhalb von mehrfachen Ausprägungen) für ein Pandas Dataframe "df" mit der folgenden Syntax umsetzen.


                                            
import pandas as pd

df['Last'] = df.duplicated('Class', 'last')
                    


Python-Output: Das Ergebnis sieht in Pandas wie folgt aus, dem Pandas DataFrame wird eine neue Spalte hinzugefügt. Dabei erhält der letzte Datensatz innerhalb von mehrfachen Ausprägungen den Wert "Last = False".


                                                                                        
  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width            Class    Last
0          5.1          3.5           1.4          0.2   Iris-virginica    True
1          4.9          3.0           1.4          0.2   Iris-virginica    True
2          4.7          3.2           1.3          0.2   Iris-virginica   False
3          4.6          3.1           1.5          0.2      Iris-setosa    True
4          5.0          3.6           1.4          0.2      Iris-setosa    True
5          6.7          3.0           5.2          2.3      Iris-setosa   False
                    




Wenn Sie die nächste Episode nicht abwarten möchten, können Sie auch gerne unser umfangreiches Training Python für SAS Professionals buchen.

Informationen zu den nächsten Kursterminen und zu unserem gesamten Trainingsangebot finden Sie hier.