Die zur Formaterstellung verwendeten Daten stammen aus einer Werteliste, die als Parameter an das Makro übergeben und intern verarbeitet wird, ohne externe Abhängigkeiten oder SASHELP-Daten.
1 Codeblock
MACRO / PROC FORMAT Data
Erklärung : Dieser Block definiert das Makro `list2format`. Er initialisiert die lokalen Variablen `i` (Zähler) und `item`, um über die im Parameter `&list` bereitgestellte Werteliste zu iterieren. Die Funktion `%qscan` wird zusammen mit `%nrbquote` verwendet, um jedes Element aus der Liste zu extrahieren, unter Berücksichtigung der angegebenen Trennzeichen (Komma und Klammern). Jedes extrahierte Element wird in einer dynamischen Makrovariable (`list_&i`) gespeichert. Sobald die Liste vollständig durchlaufen ist, enthält `list_n` die Gesamtzahl der Elemente. Anschließend wird ein `PROC FORMAT`-Block generiert. Eine `%do`-Schleife wird verwendet, um die Zahl=Wert-Assoziationen in der Formatdefinition zu erstellen. Für jede Iteration wird die Zahl (`&i`) dem entsprechenden Listenwert (referenziert durch `&&list_&i`) zugeordnet, nachdem dieser mit `%sysfunc(strip())` von Leerzeichen bereinigt wurde. Das abschließende `run;` führt die Formatierungsprozedur aus.
Kopiert!
/*--------------------------------------------------------------------------------------*
Copyright 2017, Rho, Inc. All rights reserved.
PROGRAM: list2format
PURPOSE: Create a numeric format based on a list of values.
INPUT: fmtname= format name
list= list of values
DETAILS:
- list should be specified as comma-separated values enclosed in parentheses.
e.g., list=(ALT,BILI,CREAT).
PROGRAM HISTORY:
DATE PROGRAMMER DESCRIPTION
--------- --------------- ------------------------------------------------------
2017-12-15 Shane Rosanbalm Create.
*--------------------------------------------------------------------------------------*/
%macro list2format
(fmtname=
,list=
);
%*--- get first item ---;
%local i item;
%let i = 1;
%let item = %qscan(%nrbquote(&list),&i,%str((),));
%*--- continue if more items ---;
%do %while(&item ne );
%local list_&i;
%let list_&i = &item;
%let i = %eval(&i+1);
%let item = %qscan(%nrbquote(&list),&i,%str((),));
%end;
%*--- number of items found ---;
%local list_n;
%let list_n = %eval(&i-1);
%*--- make a format ---;
proc format;
value &fmtname
%do i = 1 %to &list_n;
&i = "%sysfunc(strip(&&list_&i))"
%end;
;
run;
%mend list2format;
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 : Copyright 2017, Rho, Inc. All rights reserved.
Zugehörige Dokumentation
Aucune documentation spécifique pour cette catégorie.
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.