Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

HASH-Objekti ”Taulukkotietorakenne” Sugif 12.3.2014 by Heikki Herva.

Samankaltaiset esitykset


Esitys aiheesta: "HASH-Objekti ”Taulukkotietorakenne” Sugif 12.3.2014 by Heikki Herva."— Esityksen transkriptio:

1 HASH-Objekti ”Taulukkotietorakenne” Sugif 12.3.2014 by Heikki Herva

2 /**************************************\ * Yhdistely perinteisellä Mergellä. * \**************************************/ * Ensiksi lajitellaan ensimmäinen taulu; proc sort data=asiakas_perustiedot out=asiakas_perustiedot_s; by pankki astun; run; NOTE: There were n observations read from the data set ASIAKAS_PERUSTIEDOT. NOTE: The data set ASIAKAS_PERUSTIEDOT_S has n observations and n variables. NOTE: PROCEDURE SORT used (Total process time): real time 2:52.24 cpu time 1:43.17 * Toiseksi lajitellaan toinen taulu; proc sort data=asiakaskokonaisuudet out=asiakaskokonaisuudet_s; by pankki astun; run; NOTE: There were n observations read from the data set ASIAKASKOKONAISUUDET. WHERE tyyppi_kd='R'; NOTE: The data set ASIAKASKOKONAISUUDET _S has n observations and n variables. NOTE: PROCEDURE SORT used (Total process time): real time 1.33 seconds cpu time 0.57 seconds

3 * Sitten Merge; data asiakas_ja_osallisuus_mergella; merge asiakas_perustiedot_s (in=ap) asiakaskokonaisuudet_s (in=ao); by pankki astun; if ap; run; NOTE: There were n observations read from the data set ASIAKAS_PERUSTIEDOT_S. NOTE: There were n observations read from the data set ASIAKASKOKONAISUUDET_S. NOTE: The data set WORK.ASIAKAS_JA_OSALLISUUS_MERGELLA has n observations and n variables. NOTE: DATA statement used (Total process time): real time 2:23.97 cpu time 1:11.52

4 /**************************************\ * Yhdistely Hash-objektin avulla. * \**************************************/ * Lajittelua ei tarvita; data asiakas_ja_osallisuus_hashilla; if _n_ eq 1 then do; declare hash demohash(dataset:'asiakaskokonaisuudet'); demohash.defineKey('pankki','astun'); demohash.defineDone(); end; set asiakas_perustiedot; if demohash.find() in (0, 160038) then output; run; NOTE: There were n observations read from the data set ASIAKASKOKONAISUUDET_S. NOTE: There were n observations read from the data set ASIAKAS_PERUSTIEDOT. NOTE: The data set WORK.ASIAKAS_JA_OSALLISUUS_HASHILLA has n observations and n variables. NOTE: DATA statement used (Total process time): real time 2:41.20 cpu time 1:09.68

5 data demolibr.hyvaksytyt_sopimukset demolibr.alle_12_konttorissa demolibr.ei_maksuja_konttorissa; merge demolibr.liikevaihto_12kk (in=lv) demolibr.sopimus_tapahtumat (in=st) ; by pankki astun; attrib sarake_55_rm format = commax17.2 length = 8; attrib sarake_60_rm format = commax17.2 length = 8; if (_n_ eq 1) then do; * Luodaan hash-taulu konttorissa tehdyistä maksuista.; declare hash hmaksut(dataset: ”nimi_muutettu_sum"); hmaksut.defineKey("pankki","astun"); hmaksut.defineData("pankki","astun","kappalemaara","rahamaara"); hmaksut.defineDone();

6 * Luodaan hash-taulu omista varoista.; declare hash omatvara(ordered:"a"); omatvara.defineKey("oytun","oyvol_luokitt1"); omatvara.defineData("oytun","oyvol_luokitt1", "oyvol_tietotyyppi","oyvol_rahamaara"); omatvara.defineDone(); do until (eof_toy_vol); set demolibr.toy_volyymit (keep=oytun oyvol_luokitt1 oyvol_tietotyyppi oyvol_rahamaara) end=eof_toy_vol; if oyvol_tietotyyppi = 'CA' and oyvol_luokitt1 in('40','01') and substr(oytun,7,4) eq '9000' then do; omatvara.add(); end;

7 pankki = substr(pankki,1,6); astun = astun; rc = hmaksut.find(); select (rc); when (0) do; /* Asiakkaalle löytyi maksutoimeksiantoja. */ if kappalemaara ge 12 then do; /* Haetaan hash-taulusta pankkien omat varat. */ oytun = cats(pankki, '9000'); oyvol_luokitt1 = '40'; rc = omatvara.find(); select (rc); when (0) do; /* Haku onnistui. */ sarake_55_rm = oyvol_rahamaara; end; when (160038) do; /* Pankille ei löytynyt omia varoja. Luokittelu 40. */ sarake_55_rm =.; end; otherwise do; put 'VIRHE: Pankin omien varojen haku hash-taulusta epäonnistui. Luokittelukoodi 40. ' pankki= rc= ’.’; put 'VIRHE: Ajo kaadetaan.'; abort; end;

8 oyvol_luokitt1 = '01'; rc = omatvara.find(); select (rc); when (0) do; /* Haku onnistui. */ sarake_60_rm = oyvol_rahamaara; end; when (160038) do; /* Pankille ei löytynyt omia varoja. Luokittelu 01. */ sarake_60_rm =.; end; otherwise do; put 'VIRHE: Pankin omien varojen haku hash-taulusta epäonnistui. Luokittelukoodi 01. ' pankki= rc=; put 'VIRHE: Ajo kaadetaan.'; abort; end; else do; output demolibr.alle_12_konttorissa; end;

9 when (160038) do; /* Asiakkaalle ei löytynyt maksutoimeksiantoja. */ output demolibr.ei_maksuja_konttorissa; end; otherwise do; /* Ilmeisesti joku todellinen ongelma. Tehdään virhe. */ put 'VIRHE: Haku maksuliikkeen hash-taulusta epäonnistui. ' rc= '.'; abort; end; run;

10 Muutamia muita hash-metodeja Replace() - Päivittää avaimen perusteella rivin hash-objektissa. Check() - Onko avaimella riviä hash-objektissa. Ei muuta datan arvoa. Remove() - Poistaa rivin hash-objektista. Output() - Kirjoittaa hash-objektin SAS-tauluksi. Ref() - Tekee haun, Find(), ja jos avaimella ei löydy riviä hash-objektista, lisää rivin hash-objektiin. First(), Last(), Next(), Prev() - Luetaan hash-objektia peräkkäisjärjestyksessä läpi, eteenpäin tai taaksepäin. Hash-metodien referenssikortin saa googlettamalla sas9 hash object tip sheet.


Lataa ppt "HASH-Objekti ”Taulukkotietorakenne” Sugif 12.3.2014 by Heikki Herva."

Samankaltaiset esitykset


Iklan oleh Google