DATA-vaiheen ohjelmoijan yleissivistys helposti unohtuvia asioita

Samankaltaiset tiedostot
Datavaiheen taikoja - tietäjien perintönä

Dynaamista ja joustavaa ohjelmointia - maukasta makrokielellä

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

Makrojen mystinen maailma lyhyt oppimäärä

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

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

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Kielioppia: toisin kuin Javassa

SELECT-lauseen perusmuoto

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmoinnin peruskurssien laaja oppimäärä

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Matlab- ja Maple- ohjelmointi

DATOJEN YHDISTÄMINEN MONTA ERI TEKNIIKKAA, JOISTA VOI UNELMOIDA

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Olio-ohjelmointi Javalla

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

Sisältö. 22. Taulukot. Yleistä. Yleistä

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Ohjelmoinnin peruskurssien laaja oppimäärä

XML -muotoisen raportin luonti

Ohjelmoinnin peruskurssien laaja oppimäärä

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

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

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Java-kielen perusteet

TAMPEREEN TEKNILLINEN YLIOPISTO

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Zeon PDF Driver Trial

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

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Harjoitustyö: virtuaalikone

Harjoitus 3 -- Ratkaisut

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

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

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

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

Ohjelmoinnin peruskurssi Y1

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Alternative DEA Models

Olio-ohjelmointi Syntaksikokoelma

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

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

Arduino. Kimmo Silvonen (X)

Ohjelmoinnin perusteet Y Python

ASCII-taidetta. Intro: Python

JavaScript alkeet Esimerkkikoodeja moniste 2

Fortran 90/95. + sopii erityisesti numeriikkaan:

Ohjelmoinnin perusteet Y Python

Verilogvs. VHDL. Janne Koljonen University of Vaasa

Tiedot hallintaan PROC CONTENTSilla makroja ja ODS:ää hyödyntäen. Päivi Heimonen ICT-erikoisasiantuntija, Kela SAS Tech Club 24.1.

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

SIMULINK S-funktiot. SIMULINK S-funktiot

T : Max-flow / min-cut -ongelmat

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

Choose Finland-Helsinki Valitse Finland-Helsinki

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ohjelmoinnin perusteet Y Python

Binäärioperaatiot Tiedostot ja I/O

OPPITUNTI 5 Ohjelman kulku

Java kahdessa tunnissa. Jyry Suvilehto

Operatioanalyysi 2011, Harjoitus 2, viikko 38

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Ohjelmoinnin perusteet Y Python

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Ehto- ja toistolauseet

The CCR Model and Production Correspondence

3. Muuttujat ja operaatiot 3.1

13. Loogiset operaatiot 13.1

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Tutoriaaliläsnäoloista

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

MTT:n sääaineistot ja tietokannat hallintaan SASilla

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Listarakenne (ArrayList-luokka)

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

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

Lataa Kokeilusta toimivaksi mentorointimalliksi. Lataa

13. Loogiset operaatiot 13.1

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

linux: Ympäristömuuttujat

Transkriptio:

Markku Suni Factotum emeritus Turun ammattikorkeakoulu DATA-vaiheen ohjelmoijan yleissivistys helposti unohtuvia asioita

Aivan ensimmäiseksi haluan kiittää kuulijoita kuuntelusta Kuten tunnettu poliitikko aloitti Tarkoitukseni on muistuttaa mieleen joitakin DATAvaiheen piirteitä, joiden voisi kuvitella olevan tuttuja, mutta jotka näyttävät helposti unohtuvan käytännössä.

Aivan ensimmäiseksi: selvän koodaamisen merkityksestä Tosin kaikkihan sen tietävät Sisennetään ohjelma sopivasti se lisää selkeyttä: data tulos ( keep = yksi pieni tieto ) set alku ( keep = talleta yksi tieto ); infile sasin1; input @1 yksko $char5. /* yksikkökoodi */ @12 pieni $char5. /* pientoimituskoodi */ ; if yksko = yksi then... Ohops! Sattuipa nolosti!

Selvän koodaamisen merkityksestä data tulos ( keep = yksi pieni tieto ) set alku ( keep = talleta yksi tieto ); infile sasin1; input @1 yksko $char5. /* yksikkökoodi */ @12 pieni $char5. /* pientoimituskoodi */ ; if yksko = yksi then... Ohops! Sattuipa nolosti! Puuttuu puolipiste data-lauseen lopusta

Selvän koodaamisen merkityksestä DATA tulos ( keep = yksi pieni tieto ) ; SET alku ( keep = talleta yksi tieto end = loppuiset ); infile sasin1 end = loppuifile ; if not loppuifile input @1 yksko $char5. /* yksikkökoodi */ @12 pieni $char5. /* pientoimituskoodi */ ; if yksko = yksi then... Ohops! Sattuipa nolosti! Ajatus oli lukea SAS-tiedostoa ja peräkkäistiedostoa samaan tahtiin.. Entäs, jos tiedostoissa on eri määrä havaintoja?

Ellei koodata selkeästi, On vaikeaa todeta Koodin kuntoa. Auttaisiko BUGOMETER?

Palautetaanpa mieleen, milloin ja miten output tapahtuu Tiedoston avaa lause INFILE tai SET Lukeminen tapahtuu lauseella INPUT tai SET - näiden lauseiden kohdalla Tulostus tapahtuu lauseella PUT tai OUTPUT Lukeminen loppuu silloin, kun lukulause ei onnistu ( ts. tuottaa EOF-merkin ) - ei viimeisen tietueen kohdalla

Entäs, jos emme tiedä, montako tietuetta on? DATA molemmat (KEEP =... ) INFILE inputti1 END = ended1 ; IF ended1 = 0 THEN INPUT ; INFILE inputti2 END = ended2 ; IF ended2 = 0 THEN INPUT ; RUN; /* hoidetaan kaikenlaista */

Entäs, jos emme tiedä, montako tietuetta on? DATA molemmat (KEEP =... ) INFILE inputti1 END = ended1 ; IF ended1 = 0 THEN INPUT ; IF ended2 = 0 THEN SET inputti2 ( END = ended2 ) ; RUN; /* hoidetaan kaikenlaista */

Tiedostojen hyödyllisiä optioita DATA new ( KEEP = custno /* asiakasnumero, num */ object /* vakuutuskohteen koodi */ income /* maksutulo */ outcome /* kustannukset yht. */ ); SET old( DROP = policy term version RENAME = ( payment = income ) RENAME = ( claimspay = outcome ) WHERE = ( year = 2009 )); IF income > 10 THEN...... RUN;

CAUTION DO NOT DISTURB Professional SAS program at work

Monipuolinen DO DO END on lohko, joka suoritetaan kerralla DO laskuri = 1 TO 10;... END; DO laskuri = alaraja TO ylaraja BY askel;... END; IF jotain THEN DO laskenta = 10 TO 0 BY -1 ;.... END; Tämähän on tuttua kaikki muistavat.

Monipuolinen DO DO END toimii myös listan avulla DO fibonacci = 1, 2, 3, 5, 8, 13, 21, 44, 63 ;... END; DO coding = XA, XB, XQ, XZ ;... END; Tämänkin ehkä muistamme.

Monipuolinen DO Mutta entäs nämä: DO UNTIL (( tax_change < 0 ) AND ( salary_change > 0)); DO UNTIL ( count >= 100 ); DO UNTIL ( cows_come_home ) ; DO WHILE (( tax_change >= 0 ) OR ( salary_change <= 0)); DO WHILE ( count < 100 ); DO WHILE ( NOT( file_loppui )) ;

Monipuolinen DO Puhumattakaan tästä: DO from = here TO eternity UNTIL ( war_begins ); DO days = 1 TO 1000 UNTIL ( correct > 10 ); DO counter = 1 TO 100 WHILE ( errorcount < 10 ); DO WHILE ( TRUE );... IF XX THEN LEAVE;.. END;

Procedure PRINTTO vanha, mutta toimiva filename routed 'output-file'; proc printto print = routed new; run; proc freq data=test; tables x*y / chisq; run; data probtest( keep = df chisq prob ); infile routed; input word1 $ @; if word1='chi-squa' then do; input df chisq prob; output; end; run;

SAS-tiedostojen yhdistäminen: BY-lauseella Öhman Åke

Muuten, muistatkos tätä? Funktion argumenttina voi toimia muuttuja tai lauseke: Jonkun edellisen kuun alku niinmonta kuuta sitten: ajopvm = today(); edkuu = month( ajopvm ) - niinmonta; edalku = MDY( edkuu + ( edkuu <= 0 )*12, 1, year( ajopvm ) - ( edkuu <= 0 )); Siis: MDY( kuukausi, paiva, vuosi )

Muuten, muistatkos tätä? Funktio INDEX etsii jonkin pituisia merkkijonoja: length laji $ 1; SET tiedot; IF ( index( ABC, laji ) ) THEN DO; IF ( laji IN ( A, B, C ) THEN DO; IF ( laji = A laji = B laji = C ) THEN DO; Mitä eroa on noissa kolmessa IF-lauseessa?

DATAvaiheen alussa SAS alustaa kaikki muuttujat puuttuviksi, paitsi jos muuttuja on mainittu RETAIN-lauseessa on olemassa globaalinen RETAIN-lause muuttuja esiintyy summaavan lauseen vasemmalla puolella summing statement muuttuja luetaan SAS-tiedostosta muuttujaa käytetään I/O-lauseen optiossa Muuttujien alustus

Muuttujien alustus DATAvaiheen alussa SAS alustaa kaikki muuttujat puuttuviksi, paitsi jos muuttuja on vektori (ARRAY) ja ARRAY-lause antaa alkuarvot vektorissa on tilapäisiä muuttujia vektoria käytetään summaavassa lauseessa vektori mainitaan RETAIN-lauseessa

FORMATin monta puolta PROC FORMAT value tili low - <0 = ylitys other = _same_; PROC FORMAT value ikary 0 12 = lapsi 12-19 = teini 20-60 = työik 60 HIGH = vanha ; ikaluokka = PUT( ika, ikary5. ); IF ( PUT( ika, ikary5. ) = lapsi THEN... IF ( PUT( saldo, tili. ) = ylitys THEN...

FORMATIN SOVELLUS FORMAT sopii moneen, esim. havaintoarvojen luokitteluun PROC FORMAT; value painot low - 40 = 1 41-60 = 2 61-80 = 3 81 - HIGH = 4; RUN; DATA neljas; length painolk $ 8; SET kokeilu; painolk = Luokka!! PUT( paino, painot. ); painory = INPUT( PUT( paino, painot3. ), 3. ); RUN;

IKIVANHA PROSEDUURI Data kokeilu; INPUT akt hinta alku loppu CARDS; 1 15 2 8 Alustan valaminen 2 8 5 12 Rakennuslupa 3 11 2 12 Materiaalihankinta 4 10 8 15 Alustan verhoilu 5 22 15 22 Seinän tekeminen 6 5 24 25 Projektin päättäminen ; PROC timeplot data = kokeilu;

PROC timeplot data = kokeilu; PLOT alku loppu / overlay hiloc ref = 12; ID akt hinta; LABEL hinta = MEur akt = aktivi- teetti ; TITLE Projektin aikataulu ; FORMAT akt hinta alku loppu 4. ; RUN; Ja tulokseksi tulee IKIVANHA PROSEDUURI

IKIVANHA PROSEDUURI Projektin aikataulu aktivi- MEur ALKU LOPPU min max teetti 2 25 *---------------------------* 1 15 2 8 A--------L 2 8 5 12 A------------L 3 11 2 13 A------------------L 4 10 8 15 A------------L 5 8 12 14 A L 6 5 24 25 AL *---------------------------*

Muistutus: automaattimuuttuja _INFILE_ pitää sisällään sen, mitä on syötöstä luettu: DATA _NULL_; INFILE FILE INPUT ja OUTPUT sisaan; ulos; INPUT $1 koodi 2.; IF koodi = 12 THEN PUT _INFILE_; RUN; Tai:... IF koodi = 12 THEN PUT Valitut: @10 _INFILE_;

Miten tuo lasketaan? Helposti: EALin_kanssa = 12* (EALin_kanssa - ilman_ealia) Vastaavasti: A antaa 78% enemmän säihkettä kuin B. enemman = a_saihke b_saihke); enemman_kertaa = (a b) / b ; enemman_pros = (( a b ) / b ) * 100; Prosenttilasku on vaikeaa jopa poliitikoille.

This is the end The Doors