makro
SAS w roli auto emailera
Saturday, November 29th, 2008 | SAS | No Comments
Dystrybucja raportów, zobacz jak wysłać e-mail bezpośrednio z %makra w SAS, czyli jedna z możliwiśco oferowanych przez ODS (Output Delivery System) SAS.
Makra - wprowadzenie
Thursday, November 27th, 2008 | SAS | No Comments
Przyjazne wprowadzenie do tworzenia makr w SAS
Jakość danych - FreqAll
Saturday, October 25th, 2008 | Data Mining, SAS | No Comments
Otrzymujesz zbiór danych do analizy, mniej lub bardziej uporządkowany i opisany. Przed rozpoczęciem jakichkolwiek analiz wypada sprawdzić jakość jaką reprezentuje zbiór.
Makro %freqAll znakomicie ułatwi Ci życie:
http://www2.sas.com/proceedings/forum2008/007-2008.pdf
Zapytanie SQL w pętli z parametrem
Friday, October 24th, 2008 | SAS | 1 Comment
Podczas pracy w środowisku SAS z pewnością spotkałeś się z koniecznością uruchomienia podobnego zapytania SQL na kilku tabelach oraz zestawienia wyników. Okazuje się że uruchomienie zapytania w pętli z parametrem nie jest trudne jeśli wykorzystamy język makr. Przedstawię prosty przykład.
W pierwszym kroku stworzyłem makro którego zadaniem jest wykonanie pętli dla wszystkich parametrów - zmiennych podanych na wejściu oraz wywołanie innego makra. Liczba parametrów jest dowolna.
Sposób wywołania makra:
%petla (tabela1, tabela2, tabela3)
Oraz samo makro:
%macro petla/ parmbuff;
%put Syspbuff contains: &syspbuff;
%let num =1;
%let zmienna = %scan(&syspbuff, &num);
%do %while (&zmienna ne);
%dodaj_wiersz(&zmienna);
%licznik(&zmienna, t1);
%let num = %eval (&num + 1);
%let zmienna = %scan (&syspbuff, &num);
%end;
%mend
Opcja parmbuff przy definicji makra powoduje zapisanie wszystkich parametrów jako jeden string w zmiennej &syspbuff. Dzięki temu możemy wykonać makro dla dowolnej liczby zmiennych. Za rozdzielenie stringa wejsciowego na poszczególne zmienne odpowiada funkcja %scan, która działa podobnie do funkcji explode w języku php.
W drugim kroku tworzę tabelę w której zostaną zapisane wyniki działania zapytań SQL wywoływanych przez makra.
proc sql noprint; create table work.macierz_wynikow
( nazwa_tabeli char(200) primary key,
t1 num,
t2 num,
t3 num,
t4 num
)
;quit;
Krok trzeci to przygotowanie makra któro wykona stosowny kod SQL.
%macro dodaj_wiersz (tabela);
proc sql noprint;
insert into work.macierz_wynikow nazwa_tabeli VALUES ( &tabela)
;quit;
%mend
%macro licznik_rekordow (tabela, pole);
proc sql noprint;
update work.macierz_wynikow set &pole = (
select
count(*)
from &tabela
)
where tabela = “&tabela”
;quit;
%mend
Więcej info w tym temacie: