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
![]()
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;
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;
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… )
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:
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:
Na początek garść linków
Wednesday, October 15th, 2008 | SAS | No Comments
SAS
http://www.sascommunity.org/wiki/Sasopedia
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 ![]()