Blogy

SAS makro funkce

SAS® Makro Jazyk nesmírně umožňuje SAS programátorům, s všestrannost a efektivitu jejich vývoj kódu. Umožňuje uživatelům SAS modularizovat programovací kód pomocí komponent“ jednou napsaných – mnohokrát použitých “ a v mnoha případech automaticky generovat kód SAS založený na datech.

související blogový příspěvek: Multi-účel, funkce makro pro získání informací o datových sad,

Makro jazyk a makro procesor

Obecně platí, SAS software zpracovává vaše SAS program krok za krokem, první skenování to pro makro jazyka objekty – makro proměnné odkazované jako &somename a makra odkazoval se na jako %somename. Pokud je nalezen, software SAS aktivuje makro procesor, který řeší a nahrazuje tyto odkazy na makro podle syntaxe jazyka makro, než SAS sestaví a provede vaše programovací kroky.

jazyk makra SAS vs. Programovací jazyk SAS

program SAS se obvykle skládá ze dvou, často protkaných vrstev-makro vrstvy a nemakro vrstvy, každá s vlastní syntaxí a vlastním načasováním kompilace a provádění. Jinými slovy, SAS kód je kombinace dvou odlišných jazyků:

  • SAS programovací jazyk (sestávající z DATA kroky, PROC kroky a globální prohlášení tak, jak LIBNAME, MOŽNOSTI, NÁZEV atd.)
  • jazyk makra SAS (složený z %LET, % IF, %DO, makro funkcí atd.), který je zpracován odděleně od A před SAS kompilátor provádí SAS kód programovacího jazyka.

rozdíl mezi nimi je jako rozdíl mezi vařením jídla a jídlem. V této analogii meal = code, cooking=SAS makro jazyk, eating=SAS programovací jazyk. Jasné pochopení tohoto rozdílu je klíčem k tomu, abyste se stali úspěšným programátorem SAS.

dva typy Maker SAS

existují dva odlišné typy Maker SAS:

  1. makra, která generují nějaký kód programovacího jazyka SAS, který může zahrnovat příkazy nebo kroky SAS;
  2. makra, která generují některé hodnoty řetězců, které lze použít jako součást kódu nebo datových hodnot programovacího jazyka SAS, ale nejedná se o úplné příkazy nebo kroky SAS. Tento typ negeneruje Žádný spustitelný kód SAS, pouze hodnotu.

co je funkce makra SAS?

funkce makra SAS je makro SAS, které generuje hodnotu. Jinými slovy, jedná se o makro typu 2 popsané výše. Jako všechna makra SAS mohou mít funkce makra SAS libovolný počet (nula nebo více) pozičních nebo/a pojmenovaných parametrů (argumentů). Uživatelé SAS mohou definovat své vlastní makro funkce, ale při tom nesmíte používat žádnou syntaxi jazyka SAS; je povolena pouze syntaxe jazyka SAS makro. Existující makro funkce můžete použít ve své vlastní definici makro funkce. Mezi jinými, jeden z nejsilnějších je %SYSFUNC makro funkce, která přináší nepřeberné množství funkcí jazyka SAS do jazyka SAS makro.

zdroje funkcí makra SAS

funkce makra SAS mohou pocházet z následujících tří zdrojů.

přednastavené makro funkce

přednastavené makro funkce, které jsou součástí makroprocesoru. Jedná se o makro funkce jako %eval, %length, %quote, %scan, %str, %sysfunc, %upcase atd. Zde je kompletní seznam předem vytvořených funkcí makra SAS.

Auto-volat makro funkce

Auto-volání makra, některé z nich jsou typu 1 (makra), a některé z nich – typ 2 (makro funkce) jako %cmpres, %, %lowcase, %clona %ověřit, atd. Tyto makro funkce doplňují předem vytvořené makro funkce. Hlavní rozdíl od pre-postavený funkce makro je, že auto-volat makro funkce programu jsou vzorky uživatelem definované makro funkce, které jsou napsány v SAS macro language a k dispozici pro vás, aniž byste museli definovat, nebo zahrnout je do svých programů. Funkce automatického volání makra jsou dodávány s instalací softwaru SAS a obvykle jsou pro vás předem nakonfigurovány nastavením možností systému MAUTOSOURCE a SASAUTOS= makro. Mohou zahrnovat několik knihoven Maker v závislosti na produktech SAS licencovaných na vašem webu. Například pro můj SAS BASE instalace automatické volání makro knihovna je v následující složce:

C:\Program Files\SASHome\SASFoundation\9.4\core\sasmacro

Tady je seznam vybraných automatické volání makra za předpokladu, s SAS software.

z hlediska použití si nevšimnete žádného rozdílu mezi předem vytvořenými a funkcemi makra automatického volání. Například makro funkce %upcase () je přednastavená, zatímco makro funkce %lowcase () je funkce automatického volání makra. Patří do zcela odlišných rodin, ale používáme je, jako by se jednalo o komplementární sourozence.

uživatelem definované makro funkce

konečně existují uživatelem definované makro funkce, které nepřicházejí s instalací SAS. Jedná se o makro funkce, které definujete sami. Obvykle jsou uchovávány odděleně od Maker pro automatické volání hlavně proto, aby se odlišily od Maker dodávaných SAS.

povolit přístup k vaší vlastní SAS macro library kromě auto-volat makro knihovny (nebo knihovny), můžete použít VLOŽKA= systém možností:
možnosti vložit=(sasautos=“path_to_your_own_macro_library_folder“);

Namísto nahrazení SASAUTOS hodnotu, tato možnost vloží další hodnota do stávající SASAUTOS možnost jako první hodnotu, což vám umožní proniknout do své vlastní makro knihovna první, a pak také do pre-set SAS automatické volání knihoven.

vytvoření uživatelem definované funkce makra

uvažujme následující příklad. Předpokládejme, že chceme vytvořit makro funkci, která vezme název datové sady jako argument a vrátí hodnotu rovnající se počtu pozorování v této datové sadě.

víme, že následující kód vypočítá počet pozorování v souboru dat:

data _null_; volání symputx (dále PENISY',n); zastavit; stanovené SASHELP.AUTA penisy=n;run; %&=PENISY;PENISY=428

Můžeme vytvořit SAS makro funkce tím, že uzavře tento kód do makra? Něco jako toto:

%makro penisy(dset=výsledek=); %globální &výsledek; údaje _null_; volání symputx("&výsledek",n); zastavit; set &dset penisy=n; spustit;%mend nobs;

odpověď je „ne“. Ano, jsme vytvořili platný makro; můžeme se odvolat na toto makro, aby produkovat výsledek:

%penisy(dset=SASHELP.AUTA, výsledek=PENISY);%&=PENISY;PENISY=428

Ale to není makro funkce. Pamatujte si typ 2 makro, které negeneruje žádný kód programovacího jazyka SAS, jen hodnotu? Ale toto makro vygeneruje kód SAS, který přiřadí hodnotu makro proměnné zadané jako druhý argument (result=NOBS).

abychom vytvořili platnou funkci makra, naše makro by nemělo mít v sobě žádný kód jazyka SAS – ani datový krok, ani krok PROC. Může se skládat pouze z kódu makra jazyka SAS. Tady to je:

%makro penisy(dset); %místní dsid n; %nechat dsid = %sysfunc(otevřené(&dset)); %pokud &dsid %pak %; %n = %sysfunc(attrn(&dsid,nlobs)); %nechat dsid = %sysfunc(blízko(&dsid)); %end; %jiný %dal %sysfunc(sysmsg()); &n%opravit penisy;

Když makro procesor vykoná to, makro, jediný objekt, který je předán do SAS language compiler je hodnota zobrazí v řádku těsně před %opravit. Toto je vypočtená hodnota počtu pozorování (označená &n). To je jediná věc, která je viditelná překladačem jazyka SAS, zbytek je Kód jazyka makra viditelný a zpracovaný procesorem makra SAS.

důležité: Při definování SAS makro funkce vždy použijte %místní prohlášení seznam VŠECH makro proměnné, které jsou vytvořeny v makru, aby bylo zajištěno, že nebude omylem přepsat stejným názvem makro proměnné v volající prostředí. Pro makro parametry nemusíte deklarovat %local, protože jsou vždy automaticky lokální.

SAS makro funkce příklady použití

když je funkce makra definována tímto způsobem, kamkoli umístíte její vyvolání %nobs (SASHELP.Auta) ve vašem kódu SAS bude vyhodnocen a nahrazen odpovídající hodnotou (v tomto případě je to číslo 428) procesorem SAS makro. Tímto způsobem se můžete vyhnout nestandardní hard-Kódování A aby váš SAS kód dynamický a výkonný. Makro funkce můžete použít v mnoha kontextech kódování SAS. Například:

  • příkazy Přiřazení pro makro proměnnou: %nechat PENISY=%penisy(SASHELP.CARS);
  • příkaz přiřazení v datovém kroku: x = %nobs (SASHELP.CARS);
  • jako součást výrazu v datovém kroku: x = %nobs (SASHELP.CARS) /2 + 3;
  • jako hodnota datového kroku do smyčky: do I=1 na %nobs (SASHELP.Aut);
  • jako hodnota makra do loop: %do & i=1% až %nobs(SASHELP.Aut);
  • jako součást podmínky v prohlášení IF: if %nobs (SASHELP.Auta) > 500 pak dělat;

a tak dále. Je důležité si uvědomit, že argumenty (parametry) makro funkcí musí být buď SAS konstanty nebo makro výrazy rozlišující SAS konstanty. Vzhledem k tomu, že funkce makra jsou vyřešeny procesorem makra před spuštěním programu SAS, argumenty nemohou být názvy proměnných. To je klíčový rozdíl mezi funkcemi makra a funkcemi SAS.

vaše myšlenky?

považujete tento příspěvek za užitečný? Používáte makro funkce SAS? Můžete navrhnout další příklady použití? Prosím, podělte se s námi v komentářích níže.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.