120 likes | 286 Views
Sugif 29.1.2014 by Heikki Herva. Proc FCMP Itse kirjoitetut funktiot Hash objekti ”Taulukkotietorakenne”. Yleismoduuli (Yleisosa). proc fcmp outlib = lt_comu.functions.kurssaus_ltl ; subroutine kurssaus_ltl ( valkd_in $, valuutta_rm_in ,
E N D
Sugif 29.1.2014by Heikki Herva Proc FCMP • Itse kirjoitetut funktiot Hash objekti • ”Taulukkotietorakenne”
Yleismoduuli (Yleisosa)
procfcmpoutlib = lt_comu.functions.kurssaus_ltl; subroutinekurssaus_ltl(valkd_in $, valuutta_rm_in, kurssattu_rm, kurssi_out, paluukd, sqlkd); outargskurssattu_rm, kurssi_out, paluukd, sqlkd; attribkurssattu_rmformat = 17.2length = 8; attribkurssi_outformat = 8.4length = 8; attribpaluukdformat = 8.length = 8; attribsqlkdformat = 8.length = 8; sqlselect = 'select curate into :sqlresults from comu.exchrate where curncycd = "'||trim(valkd_in)||'" order by enddtdesc;'; rc = run_macro('hae_valuuttakurssi', sqlselect, sqlresults, sqlrc, sqlobs); ifsqlrceq0and sqlobsgt0then paluukd = 0; else paluukd = 1; sqlkd = sqlrc; kurssi_out = sqlresults; kurssattu_rm = valuutta_rm_in * kurssi_out; endsub; quit;
%macrohae_valuuttakurssi; %letsqlselect=%sysfunc(dequote(&sqlselect)); %letsqlresults=; procsqloutobs=1noprint; &sqlselect; quit; %letsqlresults=&sqlresults; %letsqlrc=&sqlrc; %letsqlobs=&sqlobs; %mendhae_valuuttakurssi;
datanimi_muutettu_1; set nimi_muutettu_2; attribvalkd_informat = $3.length = $3informat = $3.; attribvaluutta_rm_informat = 17.2length = 8informat = 17.2; attribkurssi_outformat = 8.4length = 8informat = 8.4; attribkurssattu_rmformat = commax17.2length = 8 informat = commax17.2; attribpaluukdformat = 8.length = 8informat = 8.; attribsqlkdformat = 8.length = 8informat = 8.; attrib arvonal_ltl_alle_1v format = commax17.2length = 8 informat = commax17.2; attrib arvonal_ltl_1_5v format = commax17.2length = 8 informat = commax17.2; . . ... Lisää SAS-koodia ... . .
/* Jos valuutta ei ole liti, tehdään rahamääräälle valuuttamuunnos. */ if valuutta_kdi ne'LTL'thendo; valkd_in = valuutta_kdi; valuutta_rm_in = arvonalent_val; kurssattu_rm = .; callkurssaus_ltl(valkd_in, valuutta_rm_in, kurssattu_rm, kurssi_out, paluukd, sqlkd); if paluukd ne0then put’VAROITUS: Poikkeus kurssauksessa ' paluukd= sqlkd= ’.’; end; if lopetus_pvm eq.thenlopetus_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 eq0) do; arvonal_ltl_alle_1v = arvonalent_val; end; ... SAS-koodi jatkuu... run;
HASH Objekti ”Taulukkotietorakenne”
datanimi_muutettu_3 nimi_muutettu_4 nimi_muutettu_5nimi_muutettu_6; mergesuoherva.liikevaihto_12kk (in=lv) suoherva.sopimus_tapahtumat (in=st) ; by pankki astun; attribsarake_55_rm format= commax17.2length= 8; attrib sarake_60_rm format = commax17.2length = 8; if (_n_ eq 1) thendo; * 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();
* 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(); dountil (eof_toy_vol); setkirjasto.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'thendo; omatvara.add(); end; end; end;
pankki = substr(pankki,1,6); astun = astun; rc = hmaksut.find(); select (rc); when (0) do; /* Asiakkaalle löytyi maksutoimeksiantoja. */ if kappalemaara ge 12thendo; /* 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; end;
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; end; end; elsedo; outputnimi_muutettu_5; end; end;
when(160038) do; • /* Asiakkaalle ei löytynyt maksutoimeksiantoja. */ • outputnimi_muutettu_6; • end; • otherwise do; • /* Ilmeisesti joku todellinen ongelma. Tehdään virhe. */ • put'VIRHE: Haku maksuliikkeen hash-taulusta epäonnistui. ' rc= '.'; • abort; • end; • end; • run;