1 / 12

Sugif 29.1.2014 by Heikki Herva

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 ,

foy
Download Presentation

Sugif 29.1.2014 by Heikki Herva

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Yleismoduuli (Yleisosa)

  3. 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;

  4. %macrohae_valuuttakurssi; %letsqlselect=%sysfunc(dequote(&sqlselect)); %letsqlresults=; procsqloutobs=1noprint; &sqlselect; quit; %letsqlresults=&sqlresults; %letsqlrc=&sqlrc; %letsqlobs=&sqlobs; %mendhae_valuuttakurssi;

  5. 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 ... . .

  6. /* 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;

  7. HASH Objekti ”Taulukkotietorakenne”

  8. 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();

  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(); 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;

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

  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; end; end; elsedo; outputnimi_muutettu_5; end; end;

  12. 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;

More Related