Statisztikai szoftverek Molnár Gábor József



Hasonló dokumentumok
Matematikai statisztikai programcsomagok gyakorlat

Hatályos: január 1.-tıl jei hatállyal változik a forgalmi kivonat díja jei hatállyal a kamatadó mértéke módosult.

FELHASZNÁLÓI LEÍRÁS a DIMSQL Integrált Számviteli Rendszer Mérleg moduljának használatához

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Statisztikai szoftverek esszé

MECSEK TAKARÉK Szövetkezet Hirdetménye a től érvényes kondícióiról

Adatbázisok* tulajdonságai

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

KÖZPONTI ELEKTRONIKUS NYILVÁNTARTÁS A SZOLGÁLTATÁST IGÉNYBEVEVİKRİL (KENYSZI) FELHASZNÁLÓI KÉZIKÖNYV ADATSZOLGÁLTATÓK RÉSZÉRE. Budapest,

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Adatbázisok biztonsága

INFORMATIKAI ALAPISMERETEK

Deviza átutalás A modul működésének logikája, felépítése megegyezik, a fent leirt, Forint átutalás funkció használatával.

Adatbázisok I A relációs algebra

Államadósság Kezelő Központ Zártkörűen Működő Részvénytársaság. Összefoglaló jelentés

Adatbázisok I. Az SQL nyelv

ADATBÁZIS HASZNÁLAT I. 4. gyakorlat

Listázó Munkahelyen letöltés SQL naplóból

(hatályos: augusztus 15. napjától)

Kondíciós lista jogi személyek, jogi személyiség nélküli szervezetek részére Általános és speciális rendelkezések

Jelen Hirdetmény a június 05. napján közzétett javításokkal egységes szerkezetben kerül kiadásra.

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

KIEGÉSZÍTİ MELLÉKLET A Primor Audit Kft évi BESZÁMOLÓJÁHOZ

1.A rendelet hatálya. 1.. A rendelet hatálya kiterjed a helyi önkormányzatra és költségvetési szervére.

Kiegészítı melléklet

V E R S E N Y T A N Á C S

MKB. MKB Alapkezelı zrt. Megszőnési jelentés. Nyíltvégő Nemzetközi Kötvény Befektetési Alap május 2.

A hitelintézetekről és a pénzügyi vállalkozásokról szóló törvény szerinti egyoldalú szerződésmódosítás alapjául szolgáló okok listája

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

LVIII. KONDÍCIÓS LISTA MILES & MORE MKB MASTERCARD GOLD ÉS STANDARD HITELKÁRTYA MAGÁNSZEMÉLYEK RÉSZÉRE

Pannon Várszínház Nonprofit Kft Veszprém Rákóczi u évi Egyszerősített éves beszámoló Kiegészítı melléklete

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

JEGYZİKÖNYV. Készült: a Kulturális Bizottság február 9-én a Polgármesteri Hivatal tanácskozótermében megtartott ülésén.

Az elektronikus napló

Preambulum. Ügyfélmenedzser: Fábos Rudolf

MASTERCARD BUSINESS, VISA BUSINESS

MKB Alapkezelı zrt. MKB GOLD Private Banking Tıkevédett Származtatott Alap. Éves beszámoló november 4.- december 31.

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

HIRDETMÉNY. Az FHB JELZÁLOGBANK NYRT. hivatalos tájékoztatója a forintosítással érintett lakossági jelzáloghitelek esetén alkalmazott kondíciókról

Java és web programozás

3. ALKALOM. Felsorolás Helyesírás ellenırzés Váltás kis és nagybető között Táblázat Ablak felosztása Formátummásoló FELSOROLÁS ÉS SZÁMOZÁS

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

IV. Raiffeisen OKOSkártya, Bank-, és Hitelkártya Kondíciós Lista

3. gyakorlat Saját adatok használata

Számlakészítés a SPRINT programmal

A CIB Bank Zrt. Általános Üzletszabályzata (a továbbiakban "Üzletszabályzat")

Adatbázis-kezelés ODBC driverrel

Tájékoztató. 2) magyarországi pénzforgalmi szolgáltatónál vezetett fizetési számlára (utalási költségtıl mentesen), vagy

KIEGÉSZÍTİ MELLÉKLET Az UNIQA és Egyesült Közszolgálati Nyugdíjpénztár évi beszámolójához

TARTOZÁSÁTVÁLLALÁSI SZERZŐDÉS. Magyar Állam. Budapest Főváros XIV. Kerület Zugló Önkormányzata. valamint az. OTP Bank Nyrt. között

TÁJÉKOZTATÓ 1/2011. Lakossági forint alapú, piaci kamatozású lakáscélú jelzáloghitelhez

Kiegészítı melléklet a évi éves beszámolóhoz. Bizalom Nyugdíjpénztár. Budapest, március 14.

ArcGIS 8.3 példa 1. Dr. Iványi Péter

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ KÖZÉPSZINT% GYAKORLATI ÉRETTSÉGI VIZSGA. É R E T T S É G I V I Z S G A október 17.

Terméktájékoztató Prémium befektetés

Kölcsönszerzıdés Lakossági deviza alapú szabad felhasználású jelzáloghitelhez

Tartalom Belépés a számlára Beállítások ablak 22 Beállítási lehetőségek első belépéskor Pozíciók ablak 23 Bemutató túra indítása Élő megbízások

LBRA6i integrált rendszer

A RÁBA Nyrt I-IV. negyedéves jelentése ÖSSZEFOGLALÁS

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

SZENTLİRINC-ORMÁNSÁG TAKARÉKSZÖVETKEZET ÁLTALÁNOS SZERZİDÉSI FELTÉTELEI FIZETÉSI SZÁMLÁK VEZETÉSÉHEZ

Tranzakciók az SQL-ben

TÁJÉKOZTATÓ a Gyűjtőszámlahitelről

Lúgos akkumulátorok szállítása

CIB Lakáshitel és Szabad felhasználású ingatlanfedezetes hitel

HIRDETMÉNY. A Polgári Takarékszövetkezet (a továbbiakban Polgári Takarék) hivatalos tájékoztatója a lakossági hitelek esetén alkalmazott kondíciókról

HATODIK FEJEZET / FÜGGİ MODELLEK / TANGRAM

FHB SZEMÉLYI KÖLCSÖN ÁLTALÁNOS SZERZŐDÉSI FELTÉTELEI

XLI. A KÖZPONTI KÖLTSÉGVETÉS KAMATELSZÁMOLÁSAI, TŐKEVISSZATÉRÜLÉSEI, AZ ADÓSSÁG- ÉS KÖVETELÉS-KEZELÉS KÖLTSÉGEI FEJEZET 2007

Közzétéve november 16-án. Hatályos november 16-tól.

Elıadó: Ribányi József polgármester. Tisztelt Képviselı-testület!

AZ EGIS GYÓGYSZERGYÁR NYILVÁNOSAN MŰKÖDŐ RÉSZVÉNYTÁRSASÁG 2005/2006. ÉVES JELENTÉSE

KIS- és KÖZÉPVÁLLALATI HITELEZÉS Általános Szerzıdési Feltételek

HIRDETMÉNY PROFESSZIONÁLIS DÍJCSOMAGHOZ IGÉNYELT SZEMÉLYI KÖLCSÖN ÉS JELZÁLOGKÖLCSÖN FELTÉTELEI TERMÉSZETES SZEMÉLYEK RÉSZÉRE

HIRDETMÉNY. Devizaszámla-vezetés, devizaügyletek kondícióiról. Hatályos: október 01-től

MASTERCARD BUSINESS, VISA BUSINESS

INFORMATIKA. PRÓBAÉRETTSÉGI május KÖZÉPSZINT. Pontozási és javítási útmutató

Számlázás-házipénztár. (SZAMLA) verzió. Kezelési leírás

Fogyasztási (személyi) kölcsönszerzıdés (Készült az évi CXII. alaptörvény és azt módosító törvények alapján)

Kis- és közepes mérető pilóta nélküli repülı eszközök autonóm feladat-végrehajtásának támogatása digitális domborzat modell alkalmazásával

MKB Alapkezelı zrt. MKB TOP 15 LUXUS Tıkevédett Származtatott Alap. Megszőnési jelentés december 30.

A Közbeszerzési Döntıbizottság (a továbbiakban: Döntıbizottság) a Közbeszerzések Tanácsa nevében meghozta az alábbi. H A T Á R O Z A T - ot.

ZÁRSZÁMADÁS 2004 INDOKLÁS. (Elıterjesztés Hajdúszoboszló Város évi költségvetésének végrehajtásáról)

KONSZOLIDÁLT ÉVES BESZÁMOLÓ

Átalakulási Tájékoztató és Alapkezelési Szabályzat. Elixír Tıkevédett Nyíltvégő Származtatott Alapra vonatkozóan

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

INFORMATIKAI ALAPISMERETEK

A beruházási és finanszírozási döntések kölcsönhatásai

2014. január március 1. A kereskedelmi szálláshelyek vendégforgalmának alakulása

BETÉTI HIRDETMÉNY LAKOSSÁGI ÜGYFELEK FIZETÉSI SZÁMLÁIRA, LEKÖTÖTT BETÉTEIRE VONATKOZÓAN Érvényben: március 23-ától 1.

Adatbázis-kezelés. Harmadik előadás

BEVEZETÉS Az objektum fogalma

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Adatok szűrése, rendezése

A B3 TAKARÉK SZÖVETKEZET PASSZÍV ÜZLETÁGI HIRDETMÉNYE. (lezárt, nem forgalmazott termékek)

Amely napjával a Eszköz fedezetre nyújtott hitelezési tevékenységre (gép) UZLSZSZHITGEP_1_ Üzletszabályzat helyébe lép

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

HIRDETME NY. Az FHB JELZÁLOGBANK NYRT. hivatalos tájékoztatója a forintosítással érintett lakossági jelzáloghitelek esetén alkalmazott kondíciókról

Átírás:

Statisztikai szoftverek Molnár Gábor József SAS-ban megírt programok megvalósítása SQL-lel Bevezetés A SAS, statisztikai szoftver, egy önálló adatkezelési nyelvvel rendelkezik; ez a SAS BASE amely segítségével alap statisztikákat számolhatunk adatállományainkból. A SAS BASE azonban nem minden esetben a legalkalmasabb. Amikor gyorsabb futást szeretnénk elérni, sokszor célszerőbb az adatbáziskezelıknél gyakran alkalmazott SQL nyelvet használni. Ezt a SAS lehetıvé teszi számunkra a proc sql segítségével. Természetesen ez a nyelv is rendelkezik hátrányokkal. Ezekre is rámutatok a következı példákban. A feladatok lekódolása során célunk nem az azok futásából származó eredmények elemzése, hanem a különbözıképpen megírt programok összehasonlítása, futási idejük, valamint memóra felhasználásuk megfigyelése. Utóbbi két tulajdonság mérésére lesz segítségül a SAS BASE <options fullstimer> parancsa, amely futás után logolja a fent említett mérési eredményeket. Ennek kódbaágyazására csak az elsı program lefutásakor van szükség; a következı futtatásokkor minden esetben megjelenik a tárgyalt tulajdonságok a log ablakban. Megjegyzés: a feladatok bemutatása során elıször a SAS majd az SQL-es változat kerül bemutatásra. Feladatunk, az órán közösen kidolgozott minta1.sas és minta2.sas SAS BASE-ben megírt programokat megírjuk SQL nyelven, és összehasonlítsuk a futási-, ill. memóriaigényüket. A programokat részenként mutatjuk be.

Feladatok 1. feladat: minta1.sas, minta1sql.sas A program célja megmutatni az egyes ügyfelek nevét, lakóhelyét, egyenlegét forintban és hogy mekkora összegő szerzıdést kötöttek. 5 különbözı táblánk van: egy az árfolyamokat (Arfolyam), egy a fedezeteket (Fedezet), egy a hiteleket (Hitel), egy a számlákat (Szamla) és egy az ügyfeleket (Ugyfel) tartalmazó. A feladat megoldásához két fı lépést kell végrehajtanunk. Elsı lépésben összekapcsoljuk a táblákat olyan módon, hogy egy sorban láthassuk az ügyfelek adatait és az általuk felvett hitelhez kapcsolódó adatokat. Ezt a mőveletet merge-elésnek nevezzük. Ahhoz, hogy a SAS megfelelıen csatlakoztassa a két táblát az kell, hogy az összefőzendı (merge-elendı) táblák rendezve legyenek aszerint, ami szerint az összekapcsolást végezni akarjuk. Tehát két különbözı utasításra van szükségünk: a proc sort a két táblára külön-külön végrehajtva, majd a rendezést követıen a merge. 1. proc sort data=kotprogi.ugyfel; 2. by ugyfel_kod; 3. run; 4. proc sort data=kotprogi.hitel; 5. by ugyfel_kod; 6. run; 7. data Kotprogi.hitel2; 8. merge 9. Kotprogi.hitel 10. Kotprogi.ugyfel 11. ; 12. by ugyfel_kod; 13. run; SQL-ben azonban ezt az egészet egyszerre is elvégezhetjük. Az SQL 4 különbözı csatlakozást 1 kínál fel. A merge parancs megegyezik a full joinnal. Nekünk arra van szükségünk, hogy azok az ügyfelek is láthatók legyenek a táblában, akik nem vettek fel hitelt. És azok is, akik nem szerepelnek az Ugyfel táblában. Ettıl teljes. Az SQL-es megoldás azonban így nem egész, hiszen ha olyan ügyfelünk lenne, akinek a kódja nem szerepel a Hitel táblában (vagyis, aki nem vett fel hitelt), akkor a keletkezı új táblában az ügyfelünk kódja helyén egy üres cella állna. Ennek kiküszöbölésére használjuk a coalesce parancsot, ami több paramétert kaphat. Ha az egyik paramétere üres cellát 1 További join típusokat lásd [1]-ben.

eredményezne az új táblánkban, akkor helyette a másik paraméterének értékét helyezzük el. 1. proc sql; 2. create table Kotprogi.Hitel4 as 3. select 4. coalesce(hitel.ugyfel_kod, Ugyfel.UGYFEL_KOD) as UGYFEL_KOD, 5. * 6. from Kotprogi.Hitel as hitel 7. full join 8. Kotprogi.Ugyfel as ugyfel 9. on hitel.ugyfel_kod = ugyfel.ugyfel_kod 10. order by DEVIZANEM_KOD, UGYFEL_KOD 11. ; 12. quit; Most tekintsük a memóriafelhasználást és az idıigényt. A bevezetıben említett parancsot (options fullstimer) használva kapjuk meg az eredményeket. SAS Base esetén a futás 21.28 s alatt ment végbe, 555 kb-ot felhasználva, addig az SQL-es megoldás 26.17 s-ig futott 754 kb-ot használva. Tehát hiába egyszerőbb/rövidebb a megoldás SQL-ben, a SAShoz kevesebb memória kellett, és egy kicsit kevesebb idı is. A feladat azonban ezzel még nincs elvégezve. Az elkészült új táblát össze kell merge-elnünk az Arfolyam táblával, magyarul el szeretnénk érni, hogy minden deviza mellett megjelenjen annak árfolyama is, hogy kiszámíthassuk forintbeli értéküket. Az elızıhöz hasonlóan a két összekapcsolandó táblát rendeznünk kell, ezt követıen történhet meg az összekötés. Ezenkívül új változókat is bevezetünk az egyenlegek és a szerzıdés nyilvántartásához forintban. Az utóbbiak közül a huf_egyenleg2 érdekes számunkra. Ez egy olyan értéket tárol, ami euró esetén 30%-kal megnöveli az eredeti egyenleget. 1. proc sort data=kotprogi.hitel2; 2. by devizanem_kod; 3. run; 4. proc sort data=kotprogi.arfolyam; 5. by devizanem_kod; 6. run; 7. data Kotprogi.hitel3; 8. merge 9. Kotprogi.hitel2 10. Kotprogi.arfolyam; 11. by devizanem_kod; 12. if tipus='h'; 13. huf_egyenleg=egyenleg_osszeg*arfolyam; 14. huf_szerzodes=szerzodes_osszeg*arfolyam; 15. if devizanem_kod='eur' 16. then huf_egyenleg2=egyenleg_osszeg*1.3;

17. else huf_egyenleg2=huf_egyenleg; 18. run; SQL-ben nincs változás a join mőveletben. Itt is használunk coalesce parancsot a null értékek elkerülése érdekében. A különbség az új változók létrehozásánál van. Ezeket a select utasításban adhatjuk meg. Alias nevet pedig az alias paranccsal adhatunk. A huf_egyenleg2-ıt szintén a select utasításban vehetjük fel, de mivel értéke feltételhez kötött, ezért egy újabb utasítást, a case-t használjuk. Ennek szintaktikája: case <változó> when <a változó értéke> then <utasítás> else <utasítás> end Mindkét nyelv esetén azokat a sorokat kívántuk kiszőrni, ahol a hitel típusa H (azaz hitel ez minden sornál teljesül), ezt SAS esetén a merge-elést követıen egy if-fel tehetjük meg, SQL-ben pedig a where záradékkal. 1. proc sql; 2. create table Kotprogi.Hitel5 as 3. select 4. coalesce(arfolyam.devizanem_kod, Hitel4.DEVIZANEM_KOD) as DEVIZANEM_KOD, 5. *, 6. EGYENLEG_OSSZEG*arfolyam as huf_egyenleg, 7. SZERZODES_OSSZEG*arfolyam as huf_szerzodes, 8. case Hitel4.DEVIZANEM_KOD 9. when 'EUR' 10. then EGYENLEG_OSSZEG*1.3 11. else EGYENLEG_OSSZEG*arfolyam 12. end as huf_egyenleg2 13. from Kotprogi.Hitel4 as hit 14. full join 15. Kotprogi.Arfolyam as arf 16. on hit.devizanem_kod = arf.devizanem_kod 17. where TIPUS like 'H' 18. order by DEVIZANEM_KOD, UGYFEL_KOD 19. ; 20. quit; A futási idıt és memórahasználatot illetıleg az elıbbihez hasonló eredmények születtek. SAS-nál 25.51 s és 772 kb kellett a futáshoz, SQLnél viszont 4.34 s és 1107 kb.

Lényeges különbség az elızı futás és az újabb között, hogy az SQL-es futás csupán néhány másodpercig tartott. Ezt magyarázhatja az, a korábbi lépésben létrejövı táblához kapcsolt Arfolyam tábla kis mérete. Végül a kiiratás maradt hátra. Ez SAS-ban a proc printtel, SQL-ben pedig egy választó lekérdezéssel történik. Különbséget fedezhetünk fel a kapott eredmény táblázatok között. SAS esetén egy általunk ki nem választott oszlop is áll. Ez az Obs, ami arra utal, hogy az adott sor a kiírásra kerülı tábla hányadik sora eredetileg. A lekérdezés futása 0.28 s-ig tartott, 205 kb-t felhasználva, a proc print pedig 0.48 s-ig, 131 kb-t felhasználva. Az értékek nem mutatnak nagy eltérést. Ennek kimutatásához viszont nagyobb adatbázisra lenne szükségünk.

2. feladat: minta2.sas, minta2sql.sas 2.a. feladat: a program célja lakóhely és azonbelül devizanem szerint csoportosítva megadni az egyenleget devizában és forintban. Kíváncsiak vagyunk a devizában csoportosított összes egyenlegre is. A feladat megoldására a SAS Base proc tabulate-je szolgál, amelyen belül egy külön class utasítása segítségével adható meg, hogy mi alapján csoportosítunk (sorok); var utasítással adható meg, hogy mit akarunk csoportosítani (oszlopok); és a table utasítással adható meg, hogy mi is szerepeljen a sorok és oszlopok találkozásánál. 1. proc tabulate data=kotprogi.hitel3 format=ert.; 2. class ugyfel_lakhely devizanem_kod; 3. var egyenleg_osszeg huf_egyenleg huf_egyenleg2; 4. table ugyfel_lakhely=''*devizanem_kod='' all='összesen' 5. *devizanem_kod='', 6. egyenleg_osszeg='egyenleg devizában'*sum='' 7. huf_egyenleg='egyenleg HUF250'*sum='' 8. huf_egyenleg2='egyenleg HUF300'*sum='' 9. /box='lakóhely / Devizanem'; 10. run; SQL esetében egy select utasításban kell megadnunk a lakóhelyet, a devizanemet és az egyenleg összegeket. Tehát a SAS-tól eltérıen itt azonos tulajdonságú oszlopként kezelve az egyébként oszlop- és sorfejléceket. A SAS megoldástól különbözik az is, hogy itt minden sorban szerepel a lakóhely (a proc table egyesítve a cellákat, ügyesen csak egyszer írja ki). Valamint, hogy az Összesen sort egy újabb select-tel kell összefőzni az elıbbi select kimenetéhez egy union paranccsal. A kapott kimutatásban az SQL-es megoldásnál nem volt lehetıség a sorfejléc cellák háttérszínének megváltoztatására. 1. proc sql; 2. select 3. UGYFEL_LAKHELY as lakohely label='lakóhely', 4. DEVIZANEM_KOD as devizanem label='devizanem', 5. sum(egyenleg_osszeg) label='egyenleg devizában' format=comma17.1, 6. sum(huf_egyenleg) label='egyenleg HUF250' format=comma17.1, 7. sum(huf_egyenleg2) label='egyenleg HUF300' format=comma17.1 8. from Kotprogi.Hitel3 9. group by lakohely, devizanem 10. 11. union 12. 13. select 14. 'Összesen' as UGYFEL_LAKHELY, 15. DEVIZANEM_KOD as devizanem, 16. sum(egyenleg_osszeg), 17. sum(huf_egyenleg), 18. sum(huf_egyenleg2) 19. from Kotprogi.Hitel3 20. group by devizanem 21. ;

22. quit; A futási eredményekben egyértelmően a proc tabulate viszi a pálmát. Az SQL-es 712 kb helyett 184 kb memóriát fogyasztott. Idıbeli eltérés pedig nem volt. 2.b feladat: kérjük le lakóhely szerinti csoportosításban az egyenleget minden devizanem esetén, valamint az egyenlegeket forintban is. A SAS megoldás esetén nincs más teendınk, mint az elıbb alkalmazott proc tabulate-et hasonlóan alkalmazni. 1. proc tabulate data=kotprogi.hitel3 format=ert.; 2. class ugyfel_lakhely devizanem_kod; 3. var egyenleg_osszeg huf_egyenleg huf_egyenleg2; 4. table ugyfel_lakhely='' all='összesen', 5. devizanem_kod=''*egyenleg_osszeg='egyenleg devizában'*sum='' 6. huf_egyenleg='egyenleg HUF250'*sum='' 7. huf_egyenleg2='egyenleg HUF300'*sum='' 8. /box='lakóhely'; 9. run; SQL esetén viszont egy bonyolultabb a dolgunk. Ugyanis ahhoz, hogy minden devizanem esetére kiszámoljuk az egyenleget külön lekérdezéseket kell létrehoznunk. Ezeket kell a selectbe beszúrnunk, így kapjuk a táblázat oszlopait. Majd ugyanezt meg kell ismételnünk mégegyszer, ha az Összesen értékekre, azaz lakóhelyet tekintve kollektív egyenlegre vagyunk kíváncsiak. Természetesen egy újabb union parancsot kell használnunk a lakóhely szerinti és a végsı összesítı sor összefőzéséhez. 1. proc sql; 2. select 3. UGYFEL_LAKHELY as lakohely label='lakóhely', 4. (select sum(egyenleg_osszeg) from Kotprogi.Hitel3 where DEVIZANEM_KOD like 'EUR' and UGYFEL_LAKHELY like lakohely) 5. format=comma17.1 label='eur Egyenleg devizában' as euro, 6. (select sum(egyenleg_osszeg) from Kotprogi.Hitel3 where DEVIZANEM_KOD like 'HUF' and UGYFEL_LAKHELY like lakohely) 7. format=comma17.1 label='huf Egyenleg devizában' as forint, 8. (select sum(egyenleg_osszeg) from Kotprogi.Hitel3 where DEVIZANEM_KOD like 'USD' and UGYFEL_LAKHELY like lakohely) 9. format=comma17.1 label='usd Egyenleg devizában' as dollar, 10. sum(huf_egyenleg) label='egyenleg HUF250' format=comma17.1, 11. sum(huf_egyenleg2) label='egyenleg HUF300' format=comma17.1 12. from Kotprogi.Hitel3 13. group by lakohely 14. 15. union 16. 17. select 18. 'Összesen' as UGYFEL_LAKHELY as lakhely,

19. (select sum(egyenleg_osszeg) from Kotprogi.Hitel3 where DEVIZANEM_KOD like 'EUR'), 20. (select sum(egyenleg_osszeg) from Kotprogi.Hitel3 where DEVIZANEM_KOD like 'HUF'), 21. (select sum(egyenleg_osszeg) from Kotprogi.Hitel3 where DEVIZANEM_KOD like 'USD'), 22. sum(huf_egyenleg), 23. sum(huf_egyenleg2) 24. from Kotprogi.Hitel3 25. group by lakhely 26. ; 27. quit; A megjelenı táblázatban újra színezési és cellaegyesítési hiányosságokat fedezhetünk fel az SQL-es megoldásnál. A futási értékek önmagukért beszélnek: míg az SQL kódnak 1.78 s és 1 MB-ra volt szüksége, addig a SAS-nak csak 0.38 s-ra és 184 kb-ra. Konklúzó Elmondhatjuk, hogy nem használhatjuk egyöntetően minden feladatra ugyanazt a nyelvet, hiszen míg a tabulate eljárásoknál egyértelmően a SAS gyızedelmeskedik memóriafelhasználásban, addig a merge-elésnél az SQL-es megoldások eredményezhetnek gyorsabb megoldásokat. Hivatkozások [1] Katona Endre: http://www.inf.u-szeged.hu/~katona/db-ea1.pdf [2] Judy Loren: An advenced tutorial for business users