Das Skript beginnt mit der Erstellung eines Beispieldatensatzes 'test', der Geburtsdaten und Referenzdaten über `datalines` enthält. Anschließend werden zwei FCMP-Funktionen definiert: `AgeToday`, die das Alter in Bezug auf das aktuelle Datum berechnet, und `AgeDate`, die das Alter zwischen einem Geburtsdatum und einem angegebenen Referenzdatum berechnet. Schließlich verwendet das Skript diese Funktionen in einem neuen DATA-Schritt, um die berechneten Alter zum Datensatz 'test' hinzuzufügen. Die Implementierung der Altersberechnung ist robust und berücksichtigt Monats- und Tagesunterschiede für eine korrekte Genauigkeit.
Datenanalyse
Type : CREATION_INTERNE
Das Skript erstellt einen Beispieldatensatz 'test' mithilfe von `datalines`, um Geburtsdaten und Referenzdaten zu simulieren. Es sind keine externen Daten erforderlich oder werden verwendet.
1 Codeblock
DATA STEP Data
Erklärung : Dieser DATA-Schritt erstellt einen Datensatz namens 'test'. Er definiert zwei Variablen, 'birthday' und 'date2', als Datumsangaben. Die Formate `date9.` und `informat` werden zum Lesen und Anzeigen von Datumsangaben verwendet. Die Werte werden dann direkt aus den bereitgestellten `datalines` gelesen, wodurch ein Satz von Eingabedaten für die Altersberechnungen simuliert wird. Diese Daten sind intern zum Skript.
Erklärung : Diese PROC FCMP (Function Compiler) definiert eine benutzerdefinierte Funktion namens `AgeToday`. Diese Funktion nimmt ein Geburtsdatum (`DateDay`) als Argument entgegen. Sie berechnet das Alter in Jahren, indem sie das Geburtsdatum mit dem aktuellen Systemdatum (`TODAY()`) unter Verwendung der Funktion `intck` zum Zählen der Monate vergleicht. Eine Anpassung wird für den Tag des Monats (`day(bd)>day(to)`) vorgenommen, um eine korrekte Altersgenauigkeit zu gewährleisten, die Fälle verwaltet, in denen der Geburtstagsmonat vergangen ist, aber der Tag noch nicht.
Kopiert!
proc fcmp outlib=work.cat_function.test ;
function AgeToday(DateDay);
to = TODAY();
bd = DateDay;
age = int((intck('month',bd,to)-(day(bd)>day(to)))/12);
return(age);
endsub;
run;
1
PROC FCMP outlib=work.cat_function.test ;
2
function AgeToday(DateDay);
3
to = TODAY();
4
bd = DateDay;
5
age = int((intck('month',bd,to)-(day(bd)>day(to)))/12);
6
return(age);
7
endsub;
8
RUN;
3 Codeblock
PROC FCMP
Erklärung : Diese PROC FCMP definiert eine zweite benutzerdefinierte Funktion namens `AgeDate`. Im Gegensatz zu `AgeToday` ist diese Funktion generischer und nimmt zwei Argumente entgegen: ein Geburtsdatum (`Birthdate`) und ein Referenzdatum (`Date`). Sie berechnet das Alter in Jahren zwischen diesen beiden Daten unter Verwendung einer identischen Logik wie `AgeToday`, wodurch das Alter zu jedem angegebenen Datum und nicht nur zum aktuellen Datum berechnet werden kann.
Kopiert!
proc fcmp outlib=work.cat_function.test ;
function AgeDate(Birthdate,Date);
to = Date;
bd = Birthdate;
age = int((intck('month',bd,to)-(day(bd)>day(to)))/12);
return(age);
endsub;
run;
1
PROC FCMP outlib=work.cat_function.test ;
2
function AgeDate(Birthdate,Date);
3
to = Date;
4
bd = Birthdate;
5
age = int((intck('month',bd,to)-(day(bd)>day(to)))/12);
6
return(age);
7
endsub;
8
RUN;
4 Codeblock
OPTIONS
Erklärung : Diese 'options'-Anweisung ist unerlässlich, um die in dem Katalog `work.cat_function.test` definierten FCMP-Funktionen für die Verwendung in nachfolgenden SAS-Schritten, wie den DATA-Schritten, verfügbar zu machen.
Kopiert!
options cmplib=work.cat_function;
1
options cmplib=work.cat_function;
5 Codeblock
DATA STEP
Erklärung : Dieser DATA-Schritt liest den zuvor erstellten Datensatz 'test' (`set test;`). Er ruft die FCMP-Funktionen `AgeToday` und `AgeDate` auf, um das Alter in Bezug auf heute (`AgeT`) bzw. das Alter in Bezug auf das in 'date2' angegebene Datum (`AgeD`) für jede Beobachtung zu berechnen. Die Ergebnisse werden in neuen Variablen 'AgeT' und 'AgeD' gespeichert, die dem Datensatz 'test' hinzugefügt werden.
Kopiert!
data test;
set test;
AgeT = AgeToday(birthday);
AgeD = AgeDate(birthday,date2);
run;
1
DATA test;
2
SET test;
3
AgeT = AgeToday(birthday);
4
AgeD = AgeDate(birthday,date2);
5
RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Creation date : 16/04/2017 (fr)
Last update : 16/04/2017 (fr)
Author(s) : Nicolas DUPONT
Tested on SAS Studio 9.4
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.