Makrojen mystinen maailma lyhyt oppimäärä

Samankaltaiset tiedostot
Dynaamista ja joustavaa ohjelmointia - maukasta makrokielellä

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

Datavaiheen taikoja - tietäjien perintönä

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

Aureolis Oy Itsemääritellyt funktiot SAS ohjelmoinnissa

DATA-vaiheen ohjelmoijan yleissivistys helposti unohtuvia asioita

Ohjelmoinnin peruskurssien laaja oppimäärä

Dictionary taulut. Miten perus metadataa käytetään koodillisesti joustavuutta lisäämään

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Matlab- ja Maple- ohjelmointi

XML -muotoisen raportin luonti

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

TIEDON LAATU VIRPI VIRTANEN S-PANKKI JA JANNE ERÄNEN PERIGEUM

Täysautomatisoitu raportointiympäristö. Joni-Petteri Paavilainen Jani Alatalo

DI Studion käyttökokemuksia. Kaisu Ikonen, Tilastokeskus

SELECT-lauseen perusmuoto

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

ITKP102 Ohjelmointi 1 (6 op)

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Kyselyn yleisrakenne:

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin perusteet Y Python

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Ohjelmoinnin peruskurssi Y1

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

PHP tehtävä 3 Atte Pekarinen TIKT13A

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Ohjelmoinnin peruskurssi Y1

Hellä ensikosketus. Tomi Kiviniemi

Verilogvs. VHDL. Janne Koljonen University of Vaasa

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

KOOSTEFUNKTIOT. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

SAS/IML käyttö ekonometristen mallien tilastollisessa päättelyssä. Antti Suoperä

Java-kielen perusteet

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

Alustavia käyttökokemuksia SAS Studiosta. Timo Hurme Maa- ja elintarviketalouden tutkimuskeskus MTT (v alusta Luonnonvarakeskus / Luke)

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Ohjelmoinnin peruskurssien laaja oppimäärä

Harjoitustyö: virtuaalikone

Opiskeluoikeuksien maaran tiedonkeruu

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

21~--~--~r--1~~--~--~~r--1~

Ohjelmoinnin peruskurssien laaja oppimäärä

Käännös, linkitys ja lataus

HELIA 1 (14) Outi Virkki Tiedonhallinta

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

SQL - STRUCTURED QUERY LANGUAGE

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

2_1----~--~r--1.~--~--~--,.~~

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Aureolis Oy. Analytiikka määrää myymälävalikoiman - Case Alkon myymäläuudistus 2015

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Ohjelmoinnin perusteet Y Python

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Ohjelmoinnin perusteet Y Python

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmoinnin peruskurssien laaja oppimäärä

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Loppukurssin järjestelyt

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssi Y1

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Esimerkki: Laskin (alkua) TIEA341 Funktio ohjelmointi 1 Syksy 2005

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Ohjelmoinnin perusteet Y Python

Transkriptio:

Makrojen mystinen maailma lyhyt oppimäärä Makrot osana SAS-teknologiaa Yleiskuva Jouni Javanainen

Aureolis lyhyesti Aureolis on jatkuvia Business Intelligence -palveluita tuottava asiantuntijaorganisaatio Perustettu 2001 Liikevaihto 8,5 M Henkilöstöä 95 BI-hankkeita 1000

Sisältö Miksi makrot? Makromuuttujat Makrot Tärkeimmät prinsiipit

Miksi makroja tarvitaan? 4 Makromuuttujilla voidaan välittää tietoa stepistä toiseen tai ohjelmasta toiseen (parametrit) Makromuuttujilla voidaan välittää tietoja käyttöliittymästä esim. stored processille Voidaan automatisoida ja lyhentää koodin kirjoitusta

Makrokieli Makromuuttujat Makrolauseet: %let xyz=5; luo makromuuttujan xyz arvolla 5 Makrot: aliohjelma, %macro; %mend; Makron (sis. makromuuttujat) lopputulos on aina merkkijono, ts. tekstiä %let a=5+6; -> Ei laske lukuja yhteen! %let b=%eval(&a); -> Laskee luvut yhteen %let c=%eval(5+6); -> Laskee luvut yhteen

SAS-makromuuttujan luonti %let makromuuttuja=arvo; Datastepissä call symput ( makromuuttuja,arvo/lauseke/tietokenttä); Proc SQL:ssä select arvo/tietokenttä into :makromuuttuja

SAS-makromuuttujan luonti ja käyttö: %let %let x=7; %let y=kahvi on valmista; %let z=kahvi ei ole valmista; Data a; Set b; length OnkoKahviValmista $20; if &x=7 then OnkoKahviValmista= &y ; Else OnkoKahviValmista= &z ; Run;

SAS-makromuuttujan luonti ja käyttö: call symput Data _null_; call symput ( x,7); call symput ( y, Kahvi on valmista ); call symput ( z, Kahvi ei ole valmista ); run; Data a; Set b; length OnkoKahviValmista $20; if &x=7 then OnkoKahviValmista= &y ; Else OnkoKahviValmista= &z ; Run;

SAS-makromuuttujat, tärkeää Makromuuttujan tunnus on & %let esim=56; * asetetaan makromuuttujalle arvo; %put ≂ * tulostetaan makromuuttujan arvo lokille; Jos tarvitaan hipsuja, on käytettävä tuplahipsuja &esim, muutoin makromuuttujan arvoa ei ratkota. Makromuuttujaan viittaus päättyy pisteeseen (.) Pakollinen, jos osana muuta tekstiä ilman luonnollista erotinta (blankko tms.) Teksti_jossa_esim_makromuuttuja_&esim._on mukana Makromuuttujan maksimipituus on 32 768 merkkiä Huom! Kun viet makromuuttujan arvon merkkimuotoiseen normaaliin muuttujaan, määritä normaalin muuttujan pituus lenght-lauseella (tms.)

Makromuuttujien käyttötapauksia Kovakoodattujen parametrien korvaus makroilla Proc Sql; SELECT * FROM myynti.kuukausi_myyntitiedot WHERE tuote IN ( A001, A002, A003, A004, A005 ); quit; %let tuotteet= A001, A002, A003, A004, A005 ; Proc Sql; SELECT * FROM myynti.kuukausi_myyntitiedot WHERE tuote IN (&tuotteet.); quit;

Makrot Makro luodaan/esitellään %macro nimi (parametri1=, parametri2=); %* tähän väliin makron koodi; %mend nimi; prosentti+tähti aloittaa makrokielen kommenttilauseen ja se päättyy puolipisteeseen Makron sisältämä koodi voi olla SAS-koodia tai makrokielen koodia Makro suoritetaan %nimi (parametri2=t, parametri1=5); Huom! Puolipiste ei oikeasti kuulu makron suorituskutsuun, mutta sen voi sinne lisätä.

Makron parametrit Makrolla ei tarvitse olla parametreja %macro a ; %* tähän väliin makron koodi; %mend a; Makrolla voi olla nimetyt parametrit, tämä on suositeltavin tapa %macro a (parametri1=, parametri2=); %* tähän väliin makron koodi; %mend a; Makrolla voi olla positioon sidotut parametrit %macro a (x, y); %* tähän väliin makron koodi; %mend a;

Makrot: SAS-koodia %macro koodia; data a; set b; run; %mend koodia; %koodia;

Makrot: makrokielen lauseita %macro koodia; %if &x=7 %then %put &x näyttää olevan 7; %else %put &x ei ole ainakaan 7; %mend koodia; %koodia;

Makrot: makrokielen lauseita ja SAS-koodia %macro koodia; %if &x=7 %then %do; data a; set b; run; %end; %else %put Ei ajeta mitään koodia; %mend koodia; %koodia;

Makrojen käyttötapauksia Toistuva osa samassa tai eri ohjelmissa Vakio tai parametriohjattu Prosessin vaihe Ohjelman alku tai loppu Tulostuksen alku tai loppu Erilaiset taitekohdat Koodin osan tai eri ohjelmien ehdollinen suorittaminen Ohjelma x suoritetaan, jos ehto y täyttyy. Muutoin suoritetaan ohjelma z.

%put Tulostaa lokille rivin %put Tämä teksti tulostuu siis lokille; %put Tässä sekaan kirjoitetaan makromuuttujan &m arvo; %put _user_; Lokille listaus käyttäjän makromuuttujista %put _all_; Lokille listaus kaikista makromuuttujista

%sysfunc %macro DsNobs(ds)/ des='datasetin rivien lukumäärä'; %if %sysfunc(exist(&ds)) %then %do; %let tempid=%sysfunc(open(&ds,i)); %let nobs=%sysfunc(attrn(&tempid,nobs)); %let tempid=%sysfunc(close(&tempid)); %end; %else %do; %let nobs=.;%end; &nobs %mend DsNobs;

%sysfunc, datetime-funktioita %macro PutTimeStamp (Teksti=) /des='päiväys ja kellonaika lokille'; %PUT; %PUT &Teksti %sysfunc(putn(%sysfunc(today()),ddmmyyp10.)) / %sysfunc(putn(%sysfunc(time()),time8.)); %PUT; %mend PutTimeStamp;

Call symput Data vaihe Arvo voi siis perustua dataan, eikä kovakoodaukseen Makromuuttujan arvo käytettävissä vasta data vaiheen jälkeen!!! Tarkoittaa mm., että jos datassa on monta riviä, vain viimeisen rivin kohdalla arvo jää voimaan

Call symput Data _null_;set a (obs=1); Call symput ( xyz,hinta); Run; %put &xyz; Data b; set a; where hinta > &hinta;run;

Proc sql: rivit, jossa muuttujan arvot toisessa taulussa data one; input empl $; cards; 1234 6785 ; data master; input empl $ job $; cards; 1234 c 2345 x 3455 s ; proc sql noprint; select quote (strip(empl)) into :list separated by " " from one; quit; proc print data=master; where empl in (&list); run;

Hipsuilla vai ilman Syntaksin mukaan Merkkimuotoisen kanssa tuplahipsut where nimi= &heppu ; Numeerisen kanssa ei pituus=&mitattupituus;

Ehdollinen logiikka %macro testi; %if x > 0 %then %do; tähän jotain %end; %else %if x <= 0 %then %do; tähän jotain %end; %mend; %testi;

Local vs Global Tärkeää ymmärtää sekä makromuuttujan että makron vaikutusalue

Lokaali makromuuttuja luotu makron sisällä %macro LokaaliEiNay; %let abc=tämä on lokaali makromuuttuja; %put ***** Putattu makron sisällä lokaali abc-makromuuttuja &abc; %mend LokaaliEiNay; %LokaaliEiNay; %put ***** Putattu makron ulkopuolella lokaali abc-makromuuttuja &abc;

Lokaali makromuuttuja luotu makron sisällä, loki 1 %macro LokaaliEiNay; 2 %let abc=tämä on lokaali makromuuttuja; 3 %put ***** Putattu makron sisällä lokaali abc-makromuuttuja &abc; 4 5 %mend LokaaliEiNay; 6 7 %LokaaliEiNay; ***** Putattu makron sisällä lokaali abc-makromuuttuja Tämä on lokaali makromuuttuja 8 9 %put ***** Putattu makron ulkopuolella lokaali abc-makromuuttuja &abc; WARNING: Apparent symbolic reference ABC not resolved. ***** Putattu makron ulkopuolella lokaali abc-makromuuttuja &abc

Globaali makromuuttuja luotu makron sisällä %macro GlobaaliNakyy; %global def; %let def=tämä on globaali makromuuttuja; %put ***** Putattu makron sisällä globaali def-makromuuttuja &def; %mend GlobaaliNakyy; %GlobaaliNakyy; %put ***** Putattu makron ulkopuolella globaali defmakromuuttuja &def;

Globaali makromuuttuja luotu makron sisällä, loki 30 %macro GlobaaliNakyy; 31 %global def; 32 %let def=tämä on globaali makromuuttuja; 33 %put ***** Putattu makron sisällä globaali def-makromuuttuja &def; 34 35 %mend GlobaaliNakyy; 36 37 %GlobaaliNakyy; ***** Putattu makron sisällä globaali def-makromuuttuja Tämä on globaali makromuuttuja 38 39 %put ***** Putattu makron ulkopuolella globaali def-makromuuttuja &def; ***** Putattu makron ulkopuolella globaali def-makromuuttuja Tämä on globaali makromuuttuja

www.aureolis.com - contact@aureolis.com Aureolis Oy Hevosenkenkä 3 - FI-02600 Espoo, Finland www.aureolis.com - contact@aureolis.com