Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* tworzenie biblioteki */
- libname s "C:\Users\Student.WZIM\Desktop\SBI" ;
- /* SAS 4GL - przetwarzanie wierszowe */
- /*1*/
- /* pobierz dane z tabeli CARS, dokonuj�c selekcji wierszy
- tylko dla pojazd�w Audi */
- data s.AUDI ; /* data- uwt�rz tabel� */
- set sashelp.cars ; /* set- pobierz z*/
- where make='Audi' ;
- run ; /* znacznik konca bloku kodu */
- /* 2 */
- /* wybierz audi lub bmw oraz zachowaj tylko
- kolumny make, model, invoice */
- data s.audi_bmw; /*(keep=make Model Invoice)*/ ;
- set sashelp.cars ;
- where make ='Audi' or make='BMW';
- /*where make in ('Audi', 'BMW');*/
- keep make Model Invoice; /*drop */
- run;
- /* 3 */
- /* znajdz najdrozsze auto w tabeli, na podstawie
- kolumny invoice */
- /* najpierw sortowanie */
- proc sort data=sashelp.cars
- out=s.cars_sort (keep=make Model Invoice);
- by descending invoice;
- run;
- data s.cars_sort;
- set s.cars_sort ;
- IF _N_<=5 ; /*_N_ - numerator */
- run;
- /* 4*/
- /* jak zliczy� wartosc wszystkich pojazd�w
- w tabeli cars */
- data s.wartosc_cars ;
- set sashelp.cars end=koniec ;
- /* znacznik konca tabeli*/
- wartosc+invoice;
- keep make model wartosc invoice;
- if koniec then output;
- /* zrzuc� ostatni wiersz w tabeli*/
- run;
- /* 5 */
- /* przetwarzanie w grupach */
- /* podaj liczb� pojazd�w w podziale na mark� */
- data s.liczba_pojazdow ;
- set sashelp.cars ;
- by make ; /* group by */
- /* uwaga - dane musza by� posortowane
- wg danej kolumny*/
- if first.make then liczba_pojazdow=0;
- liczba_pojazdow + 1;
- if last.make then output;
- /*if last.make;*/
- keep make liczba_pojazdow ;
- run;
- /* 6 */
- /* grupowanie */
- /* podaj wartosc pojazd�w w podziale na mark� */
- data s.wartosc_pojazdow ;
- set sashelp.cars ;
- by make ;
- if first.make then wartosc_pojazdow=0;
- wartosc_pojazdow + invoice;
- if last.make then output;
- keep make wartosc_pojazdow ;
- run;
- /*7*/
- /* podaj ilosc i wartosc */
- data s.wartosc_pojazdow ;
- set sashelp.cars ;
- by make ;
- if first.make then do ;
- liczba_pojazdow =0;
- wartosc_pojazdow=0;
- end;
- liczba_pojazdow + 1;
- wartosc_pojazdow + invoice;
- if last.make then output;
- keep make wartosc_pojazdow liczba_pojazdow ;
- run;
- /**********************************************************/
- /*07/10/2018*/
- /*1*/
- /* if then else*/
- /* na podstawie kolumny invoice chcemy podzieli� pojazdy na kategorie*/
- data s.kategoria_cenowa;
- set sashelp.cars;
- length kategoria $7;
- if invoice<30000 then kategoria='tanie';
- else if invoice<60000 then kategoria='srednia';
- else kategoria='drogie';
- keep Make Model Invoice kategoria;
- run;
- /*2*/
- /* na podstawie tabeli kategoria cenowa zlicz pojazdy w ka�dej kategorii */
- /*najpierw sortowanie*/
- proc sort data=s.kategoria_cenowa;
- by kategoria;
- run;
- data s.ilosc_w_kategorii;
- set s.kategoria_cenowa;
- by kategoria;
- if first.kategoria then do ;
- liczba_w_kategorii=0;
- end;
- liczba_w_kategorii + 1;
- if last.kategoria then output;
- keep kategoria liczba_w_kategorii;
- run;
- /*3*/
- /*na podstawie kolumny invoice utw�rz now� kolumn� nowa_cena kt�ra stanowi 90% wartos�i invoice,
- now� cen� zaokr�gli� do mc setnych*/
- data s.nowa_cena;
- set sashelp.cars;
- nowa_cena = round(invoice * 0.9, 0.01);
- keep Make Model Invoice nowa_cena;
- format nowa_cena dollar10.2;
- run;
- /*4*/
- /* daty w sas */
- data s.daty;
- dzis=today();
- format dzis ddmmyy10.;
- /*format dzis date9.;*/
- wiek = dzis - '18DEC1990'd;
- dzien=day(dzis);
- dzien_tyg=weekday(dzis);
- mies=month(dzis);
- tydz=week(dzis);
- kwartal=qtr(dzis);
- run;
- /************************************************/
- /* ��czenie tabel */
- /***********************************************/
- /* wygenerujemy przyk�adowe table */
- data s.tabela_A;
- do id=1 to 1000;
- kolumna_A='ABC';
- output;
- end;
- run;
- data s.tabela_B;
- do identyfikator=1 to 1500 by 10;
- kolumna_B='BBB';
- output;
- end;
- run;
- /* **klucz do ��czenia musi mie� t� sam� nazw� */
- /* tabele do ��czenie musz� by� w ten sam spos�b posortowane po kolumnie kluczu */
- /* merge - ��czenie */
- proc sort data=s.tabela_a;
- by id;
- run;
- proc sort data=s.tabela_b;
- by identyfikator;
- run;
- data s.merged;
- merge s.tabela_a (in=a)
- s.tabela_b (rename=(identyfikator=id) in=b) ;
- by id ; /*kolumna po kt�rej ��czymy*/
- /*mechanizm ��cznia*/
- if a=b; /* inner join cz�c wsp�lna */ /* a=1 and b=1 ten sam zapis*/
- /* if a=1 left join */
- run;
- /****************************************************************************************/
- /* dane biblioteka*/
- libname b "C:\Users\Student.WZIM\Desktop\BIBL";
- /*ustal czytelnik�w kt�rze nie oddali ksi��ki */
- /* ustal imie, nazwisko, miasto i czytelnika */
- proc sort data=b.czytelnik;
- by id;
- run;
- proc sort data=b.wypozyczenia;
- by czytelnik_id;
- run;
- data b.czarna_lista;
- merge b.czytelnik (in=c)
- b.wypozyczenia (rename=(czytelnik_id=id) in=w where=(DATA_ODDANIA=.)) ;
- by id ; /*kolumna po kt�rej ��czymy*/
- /*mechanizm ��cznia*/
- if c=w; /* inner join cz�c wsp�lna */ /* a=1 and b=1 ten sam zapis*/
- keep CZYTELNIK_NAZWISKO CZYTELNIK_IMIE ADRES KSIAZKA_SYGNATURA;
- run;
- /********************** 21-10-2018 *********************/
- /* wybra� top 5 u�ytkownik�w z najwi�ksz� liczb� wypo�ycze� */
- data b.top_5;
- set b.wypozyczenia;
- by czytelnik_id;
- if first.czytelnik_id then licz_ks=0;
- licz_ks +1;
- if last.czytelnik_id;
- keep czytelnik_id licz_ks;
- run;
- proc sort data=b.top_5;
- by descending licz_ks;
- run;
- data b.top_5;
- set b.top_5;
- /*if _N_<=5 then output;*/
- if _N_=5 then call symput('top5', licz_ks);
- run;
- data b.top_5;
- set b.top_5;
- if _N_<=5 or licz_ks >= &top5. ;
- run;
- /* po��cz z tabel� czytelnik - imie, nazwisko, adres */
- proc sort data=b.top_5;
- by czytelnik_id;
- run;
- data b.top_5_czytelnicy;
- merge b.czytelnik (in=c)
- b.top_5 (in=t rename=(czytelnik_id=id));
- by ID;
- if c=t;
- keep CZYTELNIK_IMIE CZYTELNIK_NAZWISKO ADRES licz_ks;
- run;
- proc sort data=b.top_5_czytelnicy;
- by descending licz_ks;
- run;
- /* na podstawie imienia (tabela czytelnik) ustali� p�e� czytelnik�w i zliczy� czytelnik�w w podziale na p�e� */
- data b.plec;
- set b.czytelnik;
- if substr(CZYTELNIK_IMIE,length(CZYTELNIK_IMIE),1)='a' then plec='K';
- else plec='M';
- keep id czytelnik_imie plec;
- run;
- proc sort data=b.plec;
- by plec;
- run;
- data b.plec;
- set b.plec;
- by plec;
- if first.plec then liczba=0;
- liczba +1;
- if last.plec then output;
- keep plec liczba;
- run;
- /********************************************************************/
- /* *********************** SAS SQL ********************************/
- /********************************************************************/
- proc sql; /*�eby pisa� w SQL ! */
- create table b.czytelnik_gdynia as
- select *
- from b.czytelnik
- where ADRES='Gdynia';
- /* quit; */ /*zastosowa� przy powrocie do sas4gl*/
- /* case - when */
- /* pogrupowa� ksi��ki w zale�no�ci od roku wydania do 1980 - stare, 1980-2000 - wps�czesne, od 2000 - najnowsze */
- proc sql;
- create table b.podzial_ksiazek as
- select TYTUL, AUTOR_NAZWISKO, ROK_WYDANIA,
- case when ROK_WYDANIA<=1980 then 'stare'
- when ROK_WYDANIA<=2000 then 'wsp�czesne'
- else 'najnowsze'
- end as kategoria
- from b.ksiazka
- order by AUTOR_NAZWISKO;
- /* ustal najdro�sz� ksi��k� w tablei. podaj tytu� autora i cen� */
- /* a) */
- proc sql;
- select TYTUL, AUTOR_NAZWISKO, CENA
- from b.ksiazka
- where CENA=(select max(cena) from b.ksiazka);
- /* b) */
- proc sql;
- select TYTUL, AUTOR_NAZWISKO, CENA
- from b.ksiazka
- having CENA=max(CENA);
- /* c) */
- proc sql outobs=1;
- select TYTUL, AUTOR_NAZWISKO, CENA
- from b.ksiazka
- order by cena desc;
- /* ustal liczb� czytelnik� w ka�dym z miast i podaj udzia� procentowy. miasto - liczba czytelnikow - udzial procentowy*/
- /* a) */
- proc sql;
- select ADRES, count(*) as liczba_czytelnikow,
- (select count(*) from b.czytelnik) as total,
- count(*)/(select count(*) from b.czytelnik) as pct format percent8.2
- from b.czytelnik
- group by 1; /*group by ADRES*/
- /* b) */
- proc sql;
- select ADRES, count(*) as liczba_czytelnikow,
- (select count(*) from b.czytelnik) as total,
- (calculated liczba_czytelnikow)/(calculated total) as pct format percent8.2 /* dzia�a tylko w sas */
- from b.czytelnik
- group by ADRES;
- /* ############################## ZAJECIA 18-11-2018 #################################### */
- /* ###################################################################################### */
- /* #################################### F3 ########################################### */
- /* 1 */
- /* Dla ka�dego czytelnik_id, wyznacz ilo�� wypo�yczonych ksi��ek w poszczeg�lnych kwarta�ach 2007 roku
- W tabeli chcemy 5 kolumn: IDczytelnika, i wyp_kw1 - wyp_kw4 */
- proc sql;
- create table b.wyp_2007 as
- select CZYTELNIK_ID, qtr(DATA_WYPOZYCZENIA) as kwartal,
- count(*) as liczba_wypozyczen
- from b.wypozyczenia
- group by CZYTELNIK_ID, 2;
- proc sql;
- create table b.wyp_2007_v2 as
- select CZYTELNIK_ID,
- sum(qtr(DATA_WYPOZYCZENIA)=1) as kwartal_1,
- sum(qtr(DATA_WYPOZYCZENIA)=2) as kwartal_2,
- sum(qtr(DATA_WYPOZYCZENIA)=3) as kwartal_3,
- sum(qtr(DATA_WYPOZYCZENIA)=4) as kwartal_4
- from b.wypozyczenia
- group by 1;
- /* ********************************************/
- /* ctrl + / */
- /* shift + ctrl + / */
- /**********************************************/
- /*proc sql;*/
- /*create table b.wyp_2007_v3 as*/
- /*select CZYTELNIK_ID, */
- /*qtr(DATA_WYPOZYCZENIA)=1 as kwartal_1*/
- /*from b.wypozyczenia*/
- /*group by 1;*/
- /**/
- /*proc sql;*/
- /*create table b.wyp_2007_v3 as*/
- /*select CZYTELNIK_ID, */
- /*sum(qtr(DATA_WYPOZYCZENIA)=1) as kwartal_1*/
- /*from b.wypozyczenia*/
- /*group by 1;*/
- /************************ 2 ************************/
- /* Ustal cztelnik�w kt�rzy posiadali nieoddane ksi��ki na dzie� 01-10-2007 */
- proc sql;
- create table b.nieoddane_01_10_2007 as
- select *
- from b.wypozyczenia
- where DATA_WYPOZYCZENIA<'01OCT2007'd and (DATA_ODDANIA>='01OCT2007'd or DATA_ODDANIA is null);
- /*where DATA_WYPOZYCZENIA<'01OCT2007'd and (DATA_ODDANIA>='01OCT2007'd or DATA_ODDANIA=.)*/
- /************************ 3 ************************/
- /* Na podstawie tabeli ksi��ka utw�rz kolumn� nowa_cena, kt�ra stanowi 90% ceny dla ksi��ek wydanych po 2000r (w��cznie) i 50% ceny dla ksi��ek wydanych przed 2000r */
- proc sql;
- create table b.ksiazka_nowe_ceny as
- select *,
- case when ROK_WYDANIA>=2000 then cena*0.9
- else cena*0.5
- end as nowa_cena
- from b.ksiazka;
- /************************ 4 ************************/
- /* podaj liczb� ksi��ek wydanych przed rakiem 2000 i po 2000 w��cznie */
- proc sql;
- create table b.ksiazki_2000 as
- select
- sum(ROK_WYDANIA>=2000) as po2000,
- sum(ROK_WYDANIA<2000) as przed2000
- from b.ksiazka;
- proc sql;
- create table b.ksiazki_2000_v2 as
- select
- case when ROK_WYDANIA>=2000 then 'po 2000'
- else 'przed 2000'
- end as wydane_2000,
- count(*) as liczba_ksi�zek
- from b.ksiazka
- group by wydane_2000;
- /************************ 5 ************************/
- /* Podaj wszystkie ksi��ki wypo�yczone przez czytelnik�w z Gda�ska */
- /*a*/
- proc sql;
- create table b.wypozyczenia_gdansk as
- select *
- from b.wypozyczenia
- where CZYTELNIK_ID in (select CZYTELNIK_ID from b.czytelnik where ADRES = 'Gda�sk');
- /*b*/
- proc sql;
- create table b.wypozyczenia_gdansk_v2 as
- select w.*, c.ADRES
- from b.wypozyczenia as w inner join b.czytelnik as c
- on w.CZYTELNIK_ID = c.ID
- where c.ADRES = 'Gda�sk'
- order by w.CZYTELNIK_ID;
- /*c*/
- proc sql;
- create table b.wypozyczenia_gdansk_v3 as
- select w.*, c.ADRES
- from b.wypozyczenia as w, b.czytelnik as c
- where w.CZYTELNIK_ID = c.ID
- and c.ADRES = 'Gda�sk'
- order by w.CZYTELNIK_ID;
- /************************ 6 ************************/
- /* Podaj 10 czytelnik�w z najwi�ksz� liczb� wypo�ycze�. W tabeli podaj imi�, nazwisko, adres i liczb� wypo�ycze� */
- proc sql outobs=10;
- create table b.wypozyczenia_czetelnikow as
- select CZYTELNIK_ID, count(*) as liczba_wyp
- from b.wypozyczenia
- group by 1
- order by 2 desc;
- proc sql;
- create table b.wypozyczenia_czetelnikow_2 as
- select c.CZYTELNIK_IMIE, c.CZYTELNIK_NAZWISKO, c.ADRES, w.liczba_wyp
- from b.wypozyczenia_czetelnikow as w inner join b.czytelnik as c
- on (w.CZYTELNIK_ID = c.ID)
- order by liczba_wyp desc;
Add Comment
Please, Sign In to add comment