Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Sugif 29.1.2014 by Heikki Herva Proc FCMP  Itse kirjoitetut funktiot Hash objekti  ”Taulukkotietorakenne”

Samankaltaiset esitykset


Esitys aiheesta: "Sugif 29.1.2014 by Heikki Herva Proc FCMP  Itse kirjoitetut funktiot Hash objekti  ”Taulukkotietorakenne”"— Esityksen transkriptio:

1 Sugif 29.1.2014 by Heikki Herva Proc FCMP  Itse kirjoitetut funktiot Hash objekti  ”Taulukkotietorakenne”

2 Yleismoduuli (Yleisosa)

3 proc fcmp outlib = lt_comu.functions.kurssaus_ltl; subroutine kurssaus_ltl(valkd_in $, valuutta_rm_in, kurssattu_rm, kurssi_out, paluukd, sqlkd); outargs kurssattu_rm, kurssi_out, paluukd, sqlkd; attrib kurssattu_rm format = 17.2 length = 8; attrib kurssi_out format = 8.4 length = 8; attrib paluukd format = 8. length = 8; attrib sqlkd format = 8. length = 8; sqlselect = 'select curate into :sqlresults from comu.exchrate where curncycd = "'||trim(valkd_in)||'" order by enddt desc;'; rc = run_macro('hae_valuuttakurssi', sqlselect, sqlresults, sqlrc, sqlobs); if sqlrc eq 0 and sqlobs gt 0 then paluukd = 0; else paluukd = 1; sqlkd = sqlrc; kurssi_out = sqlresults; kurssattu_rm = valuutta_rm_in * kurssi_out; endsub; quit;

4 %macro hae_valuuttakurssi; %let sqlselect=%sysfunc(dequote(&sqlselect)); %let sqlresults=; proc sql outobs=1 noprint; &sqlselect; quit; %let sqlresults=&sqlresults; %let sqlrc=&sqlrc; %let sqlobs=&sqlobs; %mend hae_valuuttakurssi;

5 data nimi_muutettu_1; set nimi_muutettu_2; attrib valkd_in format = $3. length = $3 informat = $3.; attrib valuutta_rm_in format = 17.2 length = 8 informat = 17.2; attrib kurssi_out format = 8.4 length = 8 informat = 8.4; attrib kurssattu_rm format = commax17.2 length = 8 informat = commax17.2; attrib paluukd format = 8. length = 8 informat = 8.; attrib sqlkd format = 8. length = 8 informat = 8.; attrib arvonal_ltl_alle_1v format = commax17.2 length = 8 informat = commax17.2; attrib arvonal_ltl_1_5v format = commax17.2 length = 8 informat = commax17.2;.... Lisää SAS-koodia....

6 /* Jos valuutta ei ole liti, tehdään rahamääräälle valuuttamuunnos. */ if valuutta_kdi ne 'LTL' then do; valkd_in = valuutta_kdi; valuutta_rm_in = arvonalent_val; kurssattu_rm =.; call kurssaus_ltl(valkd_in, valuutta_rm_in, kurssattu_rm, kurssi_out, paluukd, sqlkd); if paluukd ne 0 then put ’VAROITUS: Poikkeus kurssauksessa ' paluukd= sqlkd= ’.’; end; if lopetus_pvm eq. then lopetus_pvm = 0; /* Lasketaan laina-aika makrolla. */ %maturiteetti(lopetus_pvm,avaus_pvm,vk,vv,kk,pp,pv0); select (valuutta_kdi); when ('LTL') do; select; when (vv eq 0) do; arvonal_ltl_alle_1v = arvonalent_val; end;... SAS-koodi jatkuu... run;

7 HASH Objekti ”Taulukkotietorakenne”

8 data nimi_muutettu_3 nimi_muutettu_4 nimi_muutettu_5 nimi_muutettu_6; merge suoherva.liikevaihto_12kk (in=lv) suoherva.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();

9 * 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 kirjasto.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;

10 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;

11 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 nimi_muutettu_5; end;

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


Lataa ppt "Sugif 29.1.2014 by Heikki Herva Proc FCMP  Itse kirjoitetut funktiot Hash objekti  ”Taulukkotietorakenne”"

Samankaltaiset esitykset


Iklan oleh Google