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:

Poprawność numeru PESEL w SQL

Wednesday, November 19th, 2008 | Data Mining | No Comments

Algorytm znalazłem na stronie:
http://wipos.p.lodz.pl/zylla/ut/pesel.html

W pierwszym kroku tworzę tabelę tymczasową zapisując w kolumnach kolejne cyfry numeru pesel,

W drugim kroku tworzę tabelę z listą numerów oraz wynikiem testu.

proc sql;
create table pesele_temp as select
id,
pesel,
input(substr(trim(pesel),1,1),commax1.) as a1,
input(substr(trim(pesel),2,1),commax1.) as a2,
input(substr(trim(pesel),3,1),commax1.) as a3,
input(substr(trim(pesel),4,1),commax1.) as a4,
input(substr(trim(pesel),5,1),commax1.) as a5,
input(substr(trim(pesel),6,1),commax1.) as a6,
input(substr(trim(pesel),7,1),commax1.) as a7,
input(substr(trim(pesel),8,1),commax1.) as a8,
input(substr(trim(pesel),9,1),commax1.) as a9,
input(substr(trim(pesel),10,1),commax1.) as a10,
input(substr(trim(pesel),11,1),commax1.) as a11
from tabela
;quit;

proc sql;
create table pesele_v as select
id,
pesel,
ifn (mod( a1 * 9 +
a2 * 7 +
a3 * 3 +
a4 * 1 +
a5 * 9 +
a6 * 7 +
a7 * 3 +
a8 * 1 +
a9 * 9 +
a10* 7
,10)=a11, 1, 0) as TEST
from pesele_temp
;quit;

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:

Data mining - ciekawy link

Saturday, October 25th, 2008 | Data Mining | No Comments

Bogaty zbiór linków do materiałów traktujących o data miningu, statystycznej analizie danych etc. (drzewa decyzyjne… )

http://www.autonlab.org/tutorials/

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:

Funkcja SCAN, dzielenie stringów

Monday, October 20th, 2008 | SAS | No Comments

Szukałem, szukałem… i znalazłem :)
funkcja SCAN w miły sposób zastępuje zabawę z SUBSTR i INDEX.Ścieżka problemu zapisana w następujący sposób:
problem1 -> problem2 -> problem3-> …

proc sql outobs=3;
select
sciezka_problemu,
scan(sciezka_problemu,1,’->’) as a1,
scan(sciezka_problemu,2,’->’) as a2,
scan(sciezka_problemu,3,’->’) as a3,
scan(sciezka_problemu,4,’->’) as a4,
scan(sciezka_problemu,5,’->’) as a5,
scan(sciezka_problemu,6,’->’) as a6,
scan(sciezka_problemu,7,’->’) as a7
from oprshare.zgloszone_problemy
;quit;

A tutaj przewodnik po funkcjach łańcuchowych SAS:

http://support.sas.com/publishing/pubcat/chaps/59343.pdf

Tags:

Na początek garść linków

Wednesday, October 15th, 2008 | SAS | No Comments

SAS

http://www.sascommunity.org/wiki/Sasopedia

http://www.sas.com/

http://www2.sas.com/proceedings/forum2008/TOC.html

http://support.sas.com/cdlsearch?ct=80000

http://www.utstat.utoronto.ca/mikevans/manuals/evanssasman.pdf - Manudal SAS w PDF

http://www.ats.ucla.edu/stat/sas/library/SASTranMan_os.html

Excel

http://www.goldenline.pl/forum/fani-excela

Text mining

http://www.stat.psu.edu/online/program/index.html- Kurs statystyki stosowanej - Polecam!

http://www.bitcetera.com/assets/media/regex_in_a_nutshell.pdf- Wyrażenia regularne, przyda się na każdym biurku :)

Tags: , , ,

Search