SAS

Miary pozycyjne, sas, teradata

Saturday, November 21st, 2009 | SAS | No Comments

Dla sasa gotowy do odpalenia kod:
* SAS

data baza;
input x best12.;
cards;
2
3
1
4
5
6
7
8
9
10
;run;
proc sort data = baza; by x; run;
data baza_pozycja;
set baza NOBS=count;
kwantyl = round(_n_/(count/4) + 0.4999, 1);
decyl = round(_n_/(count/10)+ 0.4999,1);
run;

Dla teradaty, wymagana teabelka o nazwie baza, zaierająca kolumny  id int, x int.

* TERADATA

alter table baza add kwantyl_ncr byteint;
alter table baza add decyl_ncr byteint;

update baza from
(sel
a.id
quantile(4,x) as kwantyl,
quantile(10, x) as decyl
from baza a)u
set kwantyl_ncr = u.kwantyl, decyl_ncr = u.decyl
where baza .id= u.id

Tags: ,

Macro SAS - operacje na datach

Wednesday, January 7th, 2009 | SAS | No Comments

http://analytics.ncsu.edu/sesug/2006/SC11_06.PDF

%let StartDate = %Sysevalf( ‘01JAN2004′d ) ;
%let EndDate = %Sysevalf( ‘01JAN2006′d ) ;

%let Date = %Sysfunc( InputN( 01JAN2006 , Date9 ) ) ;
%let Date2 = %Sysfunc( PutN( &Date , Date9 ) ) ;

%let NumOfMonths = %Sysfunc( Intck( Month , &StartDate , &EndDate ) ) ;
%let NewDate = %Sysfunc( Intnx( Month , &StartDate , &NumOfMonths ) ) ;

%Sysevalf - Evaluates arithmetic and logical expressions using floating-point arithmetic
%Sysfunc - Execute SAS functions (nie obsługuje funkcji put, input, lag i kilku innych)

By zapisać datę do stringa użyj kodu:


translate(put(data,ddmmyy10.),”-”,”/”) as moja_data format=$18.,
catx (” “, “Przypominamy, ze dnia”, calculated moja_data) as text

Tags:

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.

http://www2.sas.com/proceedings/sugi29/039-29.pdf

Tags: , ,

Gdzie zapisać %macro SAS

Friday, November 28th, 2008 | SAS | No Comments

Pierwsze kroki programowania w świecie SAS muszą doprowadzić do miejsca w którym zastanawiasz się w jaki sposób zapisać swoje %macro, tak aby było dostępne w dowolnym projekcie, bez potrzeby kopiowania i kompilowania kodu. Zaraz potem pojawia się myśl że fajnie by było współdzielić kawałki kodu ze współpracownikami.

Na szczęście szlaki zostały już przetarte, w internecie łatwo odnajdziemy opracowania tego i podobnych tematów. Tutaj krótko artykuły które dla mnie okazały się szczególnie pomocne.

Building and Using Macro Libraries

Autor ogólnie omawia temat budowania biblioteki makr oraz przedstawia trzy sposoby zapisywania i wywoływania makr (%include, Autocall, oraz funkcję Compiled Stored Macros).

W większości przypadków optymalnym wyborem będzie wykorzystanie funkcji Compiled Stored Macros. Szczegółowy, przyjazny opis jak używać tej funkcji znajdziemy w artykule poniżej.

A Practical Approach to the Stored Compiled Macro Facility…

Krótko pisząc definiujemy katalog w którym chcemy przechowywać nasze makra poleceniem libname, uruchamiamy opcję systemową sas MSTORED oraz ustawiamy jej atrybut SASMSTORE. Następnie dodajemy do definicji naszego makra opcję STORE. W efekcie makro zostanie skompilowane i zapisane do wybranego katalogu. Proc Catalog; umożliwia nam przegląd zgromadzony makr. Aby zachować możliwość korzystania z utworzonej biblioteki makr po uruchomieniu nowej sesji SAS musimy dodać dwie linijki do pliku autoexec.sas, to jest zdefiniować katalog oraz włączyć opcję MSTORED. Poniżej przykładowy kod, a na końcu link przydatny dla użytkowników Enterprise Guide.

libname macrolib ‘ N:\SAS programs\macro_library ‘;
options mstored sasmstore=macrolib;

%macro macro_name (parameters) / STORE SOURCE DES=”description”;
.
.
macro program code
.
.
%mend macro_name;

PROC CATALOG catalog=macrolib.sasmacr;
contents;
Quit;

http://www.sas.com/offices/europe/poland/services/support/faq_eg.html#2

Makra - wprowadzenie

Thursday, November 27th, 2008 | SAS | No Comments

Przyjazne wprowadzenie do tworzenia makr w SAS :)

http://www.ats.ucla.edu/stat/sas/library/nesug99/bt108.pdf

Tags: ,

By dane z Data Step’u zapisać do zmiennej

Wednesday, November 26th, 2008 | SAS | No Comments

:)

http://www2.sas.com/proceedings/forum2007/050-2007.pdf

%macro doit;
%let id=%sysfunc(open(moja_tabelka));
%let NObs=%sysfunc(attrn(&id,NOBS));
%syscall set(id);
%do i=1 %to &NObs;
%let rc=%sysfunc(fetchobs(&id,&i));

%* —- Analysis Code Goes Here —– *;
%put &zmienna_1;
%put &zmienna_2;

%end;
%let id=sysfunc(close(&id));
%mend;

http://www2.sas.com/proceedings/sugi31/107-31.pdf

LAG RETAIN itp

Thursday, November 20th, 2008 | SAS | No Comments

Kiedy funkcja LAG działa inaczej niż oczekiwalismy:

http://changchung.com/download/retainLagLeadInterleave_draft.pdf

;)

Tags:

Informacje o tabelach

Wednesday, November 12th, 2008 | SAS | No Comments

Enjoy ;)

http://www2.sas.com/proceedings/sugi31/259-31.pdf

PROC SQL;
SELECT *
FROM dictionary.members;
QUIT;

Select * from dictionary.dictionaries;

Tags:

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

Tags: ,

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:

http://www2.sas.com/proceedings/sugi30/130-30.pdf

Tags:

Search