Datavaiheen taikoja - tietäjien perintönä www.turkuamk.fi

Samankaltaiset tiedostot
Dynaamista ja joustavaa ohjelmointia - maukasta makrokielellä

DATA-vaiheen ohjelmoijan yleissivistys helposti unohtuvia asioita

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

Makrojen mystinen maailma lyhyt oppimäärä

Kääntäjän virheilmoituksia

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

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

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Tässä harjoituksessa käydään läpi R-ohjelman käyttöä esimerkkidatan avulla. eli matriisissa on 200 riviä (havainnot) ja 7 saraketta (mittaus-arvot)

Harjoittele tulkintoja

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet, syksy 2006

7. Lohkominen ja sulautus 2 k kokeissa. Lohkominen (Blocking)

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

Ohjelmoinnin perusteet Y Python

Tutoriaaliläsnäoloista

Harjoitus 3 (viikko 39)

2 Konekieli, aliohjelmat, keskeytykset

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

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Harjoitustyö: virtuaalikone

SPSS-pikaohje. Jukka Jauhiainen OAMK / Tekniikan yksikkö

Ohjelmoinnin perusteet Y Python

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

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

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

A250A0050 Ekonometrian perusteet Tentti

ASCII-taidetta. Intro: Python

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

(d) Laske selittäjään paino liittyvälle regressiokertoimelle 95 %:n luottamusväli ja tulkitse tulos lyhyesti.

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

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Tarkennamme geneeristä painamiskorotusalgoritmia

SAS-ohjelmiston perusteet 2010

Python-ohjelmointi Harjoitus 2

Matlab- ja Maple- ohjelmointi

SEM1, työpaja 2 ( )

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Ohjelmoinnin perusteet Y Python

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Teema 3: Tilastollisia kuvia ja tunnuslukuja

Lisätehtäviä ratkaisuineen luentomonisteen lukuun 6 liittyen., jos otoskeskiarvo on suurempi kuin 13,96. Mikä on testissä käytetty α:n arvo?

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Ohjelmoinnin perusteet Y Python

Harjoitus 2 (viikko 45)

Ehto- ja toistolauseet

Harjoitus 7: NCSS - Tilastollinen analyysi

Harjoitustyön testaus. Juha Taina

Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

pisteet Frekvenssi frekvenssi Yhteensä

Harjoitus 5 (viikko 41)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Hammastankohissin modernisointi. Heikki Laitasalmi

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

ATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014

Ohjelmoinnin peruskurssien laaja oppimäärä

voidaan hylätä, pienempi vai suurempi kuin 1 %?

Ohjelmoinnin peruskurssien laaja oppimäärä

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

811120P Diskreetit rakenteet

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Perusnäkymä yksisuuntaiseen ANOVAaan

14. Hyvä ohjelmointitapa 14.1

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

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

Ohjeita LINDOn ja LINGOn käyttöön

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu


815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

XML -muotoisen raportin luonti

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Zeon PDF Driver Trial

Ohjelmoinnin peruskurssien laaja oppimäärä

Python-ohjelmointi Harjoitus 5

4.1 Frekvenssijakauman muodostaminen tietokoneohjelmilla

Harjoitus 6 -- Ratkaisut

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Ohjelmoinnin perusteet Y Python

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

FoA5 Tilastollisen analyysin perusteet puheentutkimuksessa. 9. luento. Pertti Palo

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

Alkukartoitus Opiskeluvalmiudet

Transkriptio:

Markku Suni Factotum emeritus Turun ammattikorkeakoulu Datavaiheen taikoja - tietäjien perintönä

SAS Datavaihe lukee lauseiden SET ja INPUT avulla Datavaihe tulostaa lauseiden OUTPUT ja PUT avulla Vaan milloin loppuu lukeminen?

Sääntö: lukeminen loppuu, kun ei pystytä lukemaan Esimerkki: tiedosto 1 Aaro 78 2 Aila 52 3 Hannu 84 4 Hanna 55 5 Mauno 89 6 Maila 56 7 Niilo 90 8 Niina 48 9 Tauno 77 10 Taina 53 Luetaanpa tämä jotakin varten.

FILENAME endkoe "c:\koulutus\sas\endkoe.txt"; Data kokeilu(keep= nro nimi paino) ; RETAIN jalk 0; INFILE endkoe ; INPUT nro nimi $ paino; /* nyt luetaan */ jalk +1; /* laskuri kasvaa jälkeen lukemisen */ OUTPUT kokeilu; /* tämän voi jättää poiskin */ PROC PRINT DATA = kokeilu;

Output-ikkunaan tulee: Kokeilu Obs nro nimi paino 1 1 Aaro 78 2 2 Aila 52 3 3 Hannu 84 4 4 Hanna 55 5 5 Mauno 89 6 6 Maila 56 Aivan niin kuin odottaa sopiikin. Vaan 7 7 Niilo 90 Wait the worst is yet to come 8 8 Niina 48 kuten Batmanissa sanottiin 9 9 Tauno 77 10 10 Taina 53

FILENAME endkoe "c:\koulutus\sas\endkoe.txt"; Data kokeilu(keep= nro nimi paino) track (KEEP=ens jalk nro); RETAIN ens 0 jalk 0; ens +1; /* laskuri kasvaa ENNEN lukemista */ OUTPUT track; INFILE endkoe ; INPUT nro nimi $ paino; /* nyt luetaan */ jalk +1; /* laskuri kasvaa jälkeen lukemisen */ OUTPUT track; /* nyt täytyy olla OUTPUT-lauseet */ OUTPUT kokeilu; PROC PRINT DATA = kokeilu; PROC PRINT DATA = track;

Output-ikkunaan tulee myös: Track Obs ens jalk nro 1 1 0. /* ennen lukemista */ 2 1 1 1 /* jälkeen lukemisen */ 3 2 1. 4 2 2 2 5 3 2. 6 3 3 3............ 17 9 8. 18 9 9 9 19 10 9. /* ennen lukemista */ 20 10 10 10 21 11 10. /* ennen lukemista */ /* jälkeen lukemisen?? */

Datavaiheen suoritus päättyi siis kesken Data kokeilu(keep= nro nimi paino) track (KEEP=ens jalk nro); RETAIN ens 0 jalk 0; ens +1; /* laskuri kasvaa ENNEN lukemista */ OUTPUT track; INFILE endkoe ; /* Tässä kohdassa tuli loppu */ /* ja hyppy ulos */ INPUT nro nimi $ paino; jalk +1; /* laskuri kasvaa jälkeen lukemisen */ OUTPUT track; OUTPUT kokeilu; PROC PRINT DATA = kokeilu; PROC PRINT DATA = track;

Datavaiheen suoritus päättyy siis lukemislauseeseen EI siis datavaiheen loppuun Yleensä tällä seikalla ei ole merkitystä Se on hyvä tietää ja ymmärtää Voi tulla tilanne, jossa siitä tiedosta on hyötyä ja sen puutteesta haittaa Mitä hän ei tiedä, se ei voi häntä vahingoittaa pitää vain harvoin paikkansa

Voiko yksinkertaista datavaihetta nopeuttaa?? Data kokeilu(keep= nro nimi paino); INFILE isomatsku ; /* Lue pitkää tiedostoa */ INPUT @1 nimi $char8. @9 koodi 3. @12 osoite $char9. @22 posti $char5. ja niin edelleen IF koodi = 101 ; /* Tee yhtä jos toistakin */

Voi yksinkertaista datavaihetta nopeuttaa : Data kokeilu (KEEP= nro nimi paino ); INFILE isomatsku ; /* Lue pitkää tiedostoa */ INPUT @9 koodi 3. @; IF koodi = 101 THEN DO; INPUT @1 nimi $char8. @9 koodi 3. @12 osoite $char9. @22 posti $char5. ja niin edelleen ; /* Tee yhtä jos toistakin */ END; ELSE INPUT; /* tarvitaanko tätä? */ /* viisasta laittaa näkyviin */

Menee se viisaskin vipuun Tehdään nopsasti pieni testimateriaali : Data testi (KEEP= nro nimi paino); DO i = 1 to 20; nimi = A!! PUT( I, z3. ); ika = ranuni( 1107 ) * 60; paino = ranuni( 1107 ) * 100; END; Vaan kuinkas sitten kävikään? INPUT ja OUTPUT

Menee se viisaskin vipuun Tehdään nopsasti pieni testimateriaali : Data testi (KEEP= nro nimi paino); DO i = 1 to 20; nimi = A!! PUT( I, z3. ); ika = ranuni( 1107 ) * 60; paino = ranuni( 1107 ) * 100; OUTPUT; END; Ja johan alkaa Lyyti (ja SAS) kirjoittaa.

Datavaihe tulostaa lauseiden OUTPUT ja PUT avulla DATA kokeilu( KEEP = ); DATA kokeilu( KEEP = ); DO nro = 1 TO 10; DO nro = 1 TO 10; x = x = OUTPUT; END; END; Oletettu OUTPUT; Ei oleteta mitään; TULOS: Yksi havainto INPUT ja OUTPUT 10 havaintoa

Menee se viisaskin vipuun Mutta tähänhän ei kukaan narahda koskaan. Data testi (KEEP = nimi katuos posote yhtio... ); INFILE ; INPUT @1 kokoteksti $char200.... ; nimi = SUBSTR( kokoteksti, 1, 10 ); katuos = SUBSTR( kokoteksti, 11, 20 ); posote = SUBSTR( kokoteksti, 21, 30 ); yhtio = SUBSTR( kokoteksti, 51, 10 );... Ja kas kummaa, kuinka suuri se tulostiedosto onkaan!!

Menee se viisaskin vipuun Mutta tähänhän ei kukaan narahda koskaan. Data testi (KEEP = nimi katuos posote yhtio... ); LENGTH nimi $ 10 katuos $ 20 posote $ 30 yhtio $ 10; INFILE ; INPUT @1 kokoteksti $char200.... ; nimi = SUBSTR( kokoteksti, 1, 10 ); katuos = SUBSTR( kokoteksti, 11, 20 ); posote = SUBSTR( kokoteksti, 21, 30 ); yhtio = SUBSTR( kokoteksti, 51, 10 );... Tuo LENGTH on niin kovin helppo unohtaa.

Menee se viisaskin vipuun Yleinen opetus: INPUT ja OUTPUT Jos haluat ohjelmassa tapahtuvan jotain jollakin tietyllä tavalla, kirjoita se näkyviin. SAS tekee monia asioita automaattisesti, On helppo unohtaa, miten se automatiikka toimiikaan Joten se, minkä voi kirjoittaa näkyviin, kannattaa kirjoittaa. Helpottaa ohjelman myöhempää ylläpitoa.

Kannattaako mitään tehdä? Jospa virheen takia seuraavaa vaihetta ei kannata suorittaa. %LET cancel = ; /* Oletuksena tyhjä arvo */ DATA havainnot( KEEP = ); INFILE.... ; INPUT.... ; IF ( sex NOT IN ( M, N )) THEN CALL SYMPUT( cancel, cancel );.... PROC jokin DATA = havainnot ; Ohjauslauseita; RUN &cancel; Huom.: Kääntäjä tarkistaa kuitenkin kieliopillisen oikeellisuuden. Voi olla hyödyllistä testissä.

Ohjelman kehitysvaiheessa voi jonnekin jäädä pariton sitaatti. Tuloksena systeemi vain odottaa merkkijonon loppuvan. Seuraava tekstinpätkä voi auttaa asiaa: * ; * ; * */ ; Miksei mitään tapahdu? Nyt päästään taas jatkamaan ohjelman kanssa. EHKÄ se pariton sitaattikin löytyy..

Lause ATTRIB voi asettaa data vaiheessa muuttujalle seuraavat attribuutit kerralla format informat label length Esimerkki Attribuutit kuntoon ATTRIB nimi LENGTH = $20 FORMAT = $20. LABEL = Yrityksen nimi ;

Testin ajaksi koodia pois Emme ehkä halua suorittaa koko ohjelmaa. Tehdään poistettavasta osasta makro, jota ei käytetä... %macro kommentti; DATA jotain ;... PROC jokin ; DATA jottai ;... %mend kommentti; Testauksen päätyttyä poistetaan nuo kaksi punaista riviä

Testin ajaksi koodia pois Emme ehkä halua poistaa keskeltä... Makromuuttuja ohjaa asiaa %let jostesti = ; tai %let jostesti = %STR(%macro kommentti); %let josloppu = ; tai %let josloppu = %STR(%mend kommentti);... /* Tässä välissä voi olla hyvinkin pitkästi koodia */ %jostesti; DATA jotain ;... PROC jokin ; DATA jottai ;... %josloppu ;

Ei ole helppoa hallituksellakaan. Rahat ovat lopussa, jostain pitäisi säästää. Tai hankkia lisää rahaa. Mistäs otetaan jollei haluta lainata? Vastaus: korotetaan rikkaiden veroja. Muuten olen sitä mieltä, että verot on pantava valtion maksettaviksi. Tehdäänpä ohjelma, jolla ajatuksen hyötyjä voi tutkia.

Tehdään testidatat: n 20 % rikkaita, n 80 % köyhiä. Kuvitellaan tämän olevan todellinen verottajan aineisto. DATA koe (KEEP = hlo asema verot); DO i = 1 TO 20; /* tässä */ hlo = i; /* ovat */ asema = 5; /* rikkaat */ verot = RANUNI( 1107 ) * 100000 + 2000; OUTPUT; END; DO i = 21 TO 100; /* tässä */ hlo = i; /* ovat */ asema = 1; /* köyhät */ verot = RANUNI( 1107 ) * 1000 + 50; OUTPUT; END;

Sitten analysoidaan verottajan aineistoa: erotellaan rikkaat köyhistä. tilastoinnin hoitaa PROC UNIVARIATE haetaan sen tuloksesta tarvittavat luvut datavaiheeseen vaan miten?

Sitten analysoidaan verottajan aineistoa: erotellaan rikkaat köyhistä. tilastoinnin hoitaa PROC UNIVARIATE haetaan sen tuloksesta tarvittavat luvut datavaiheeseen vaan miten? muistaako kukaan PROC PRINTTO - nimistä tuotetta? se ohjaa tulostuksen tekstitiedostoon ellei voi käyttää tekstitiedostoa, on aina kirjasto WORK siihen voi perustaa katalogin, johon voi tuloksen ohjata PROC PRINTTO PRINT = work.cat1.sastulos.output new;

Sitten analysoidaan verottajan aineistoa: tilastoinnin hoitaa PROC UNIVARIATE PROC PRINTTO PRINT = work.cat1.sastulos.output new; PROC Univariate DATA = koe; VAR verot; PROC PRINTTO new;

Ja se tulostushan on jotain tällaista: The UNIVARIATE Procedure Variable: verot Moments N 100 Sum Weights 100 Mean 12884.3836 Sum Observations 1288438.36 Std Deviation 28218.9227 Variance 796307598 Skewness 2.15889142 Kurtosis 3.19892982 Uncorrected SS 9.54352E10 Corrected SS 7.88345E10 Coeff Variation 219.016475 Std Error Mean 2821.89227 Basic Statistical Measures Location Variability Mean 12884.38 Std Deviation 28219 Median 698.88 Variance 796307598 Mode. Range 101312 Interquartile Range 663.85875 Tests for Location: Mu0=0

Tests for Location: Mu0=0 Test Statistic p Value Student's t t 4.565867 Pr > t <.0001 Sign M 50 Pr >= M <.0001 Signed Rank S 2525 Pr >= S <.0001 Quantiles (Definition 5) Level Quantile... jatkoa 100% Max 101371.8314 99% 101187.2245 95% 85472.9361 90% 71833.7368 75% Q3 1000.5116 50% Median 698.8771 25% Q1 336.6528 10% 150.8020 5% 97.1418 1% 60.0821 0% Min 59.8365 Jatkuu edelleenkin

Poimitaan UNIVARIATEn tuloksesta vain muutama luku: FILENAME inputti catalog 'work.cat1.sastulos.output' ; DATA rajat; INFILE inputti TRUNCOVER; loytyi = 0; DO UNTIL ( loytyi = 1 ); INPUT @"Sum Observations" verosumma ; /* tai 14.2 tms */ IF verosumma > 1000.0 THEN loytyi = 1; END;......... Luemme katalogin jäsentä kuin tekstitiedostoa. FORMAT-määritys @ Sum Observations löytää tuon tekstin Vaan miltä riviltä? Siksi silmukka.

loytyi = 0; /* Alkaa isotulon alarajan haku */ DO UNTIL ( loytyi = 1 ); INPUT @"75% Q3" isoraja ; /* tai 20.2 tms */ IF isoraja > 100.0 THEN loytyi = 1; END; loytyi = 0; /* Alkaa pienen tulon ylärajan haku */ DO UNTIL ( loytyi = 1 ); INPUT @"25% Q1" pienraja 20.2; IF pienraja > 10.0 THEN loytyi = 1; END; /* Asetetaan makromuuttujiin */ CALL SYMPUT("verosumma", PUT(verosumma, 12.2 )); CALL SYMPUT("isoraja", PUT(isoraja, 12.2 )); CALL SYMPUT("pienraja", PUT(pienraja, 12.2 )); STOP; /* Nyt saa datavaihe loppua kesken */

Nyt on tiedossa rikkaat ja köyhät korotetaan rikkaiden veroja: DATA uustaulu ; RETAIN lisasum 0.0; SET koe END = loppu; IF verot >= &isoraja THEN DO; uusverot = verot * 1.2 ; /* 20 prosentin korotus */ pienverot = 0.0; END; ELSE DO; /* köyhille ei mitään vielä */ uusverot = verot; pienverot = verot; END; lisays = uusverot - verot; /* paljonko saadaan verotuloa */ lisasum + lisays; /* lisää rikkailta?? */ IF loppu THEN CALL SYMPUT( "lisasum", PUT( lisasum, 12.2 ));

Nyt innostutaan harhateille: paljonko köyhien verotusta voisi keventää: DATA korjaus; RETAIN piensumma 0.0; /* köyhien verot */ RETAIN pienkpl 0 ; /* köyhien lukumäärä */ SET uustaulu END = loppu; IF verot < &pienraja THEN DO; /* köyhien verokertymä */ piensumma + verot; pienkpl + 1 ; END; IF loppu THEN DO; CALL SYMPUT( "piensumma", PUT( piensumma, 12.2 )); CALL SYMPUT( "pienkpl", PUT( pienkpl, 12. )); vahennys = piensumma - &lisasum ; vahpros = (piensumma - vahennys )/piensumma; CALL SYMPUT( "vahpros", PUT ( vahpros, 12.2 )); /* Paljonko on varaa keventää köyhien veroja */ END;

Noniin, nyt kevenee köyhien verotus: DATA uusivero; SET uustaulu; IF verot < &pienraja THEN uusverot = verot - verot * &vahpros ; /* Kevennetään köyhien verotusta */ PROC SORT DATA = uusivero; BY uusverot; PROC PRINT DATA = uusivero; TITLE "Oikeudenmukaisempi verotus, vahennyspros &vahpros";

Ja niin, nyt on oikeudenmukaisempi verotus: Oikeudenmukaisempi verotus, vahennyspros 58.10 Obs lisasum hlo asema verot uusverot pienverot lisays 1 249280.80 61 1 327.06-18675.06 327.059 0.00 2 249280.80 67 1 309.51-17672.78 309.506 0.00 3 249280.80 39 1 285.00-16273.69 285.003 0.00........ 25 249280.80 55 1 59.84-3416.66 59.836 0.00 26 249074.98 31 1 346.25 346.25 346.247 0.00 27 249280.80 42 1 363.11 363.11 363.110 0.00........ 74 248873.23 22 1 979.60 979.60 979.600 0.00 75 249280.80 51 1 999.10 999.10 999.098 0.00 76 249481.18 79 1 1001.93 1202.31 0.000 200.39........ 97 144556.53 12 5 94466.73 113360.07 0.000 18893.35 98 125663.19 11 5 100565.76 120678.92 0.000 20113.15 99 74513.20 6 5 101002.62 121203.14 0.000 20200.52 100196155.68 16 5 101371.83 121646.20 0.000 20274.37

Verotusesimerkki Tässä esimerkissä oleellista oli Halutunlaisen testimateriaalin teko satunnaislukujen avulla Koko, muoto, jakautuma, jne Proseduurin tulostuksen hyväksikäyttö Ohjataan aputiedostoon PRINTTOn avulla Ellei tekstitiedostoa voi käyttää, sopii katalogin jäsen Luetaan tekstinä datavaiheeseen Valitaan sopivat tiedot Paikkamääritys @ teksti toimii oikein hyvin Kun ei datavaihetta tarvitse ajaa loppuun, käytetään STOP Kuljetetaan erilaisia kertoimia makromuuttujina vaiheesta toiseen Vähemmän oleellista oli viisastelu verotuksesta

Sovellusesimerkki Tästä esimerkistä opimme vaikkapa Jos tarvitaan tilastollinen analyysi henkilöille, jotka eivät ymmärrä tilastotiedettä: Mitä tarkoittaa: Student's t t 4.565867 Pr > t <.0001??? Analyysin jälkeen voimme poimia oleellisen tuloksen datavaiheeseen Voimme varustaa sen tarvittavalla selittävällä tekstillä Student's t t 4.565867 Pr > t <.0001 Tarkoittaa: ryhmien tuloksissa on/ei ole merkittävä ero Tarkoittaa: XYZ on/ei ole parempi/kannattavampi Ja tämä suomennos tulee samasta ohjelmasta saman tien vrt: tämä mascara antaa 17 % enemmän säihkettä silmiisi

Varottava huomio Tästä esimerkistä huomaamme myös Jos ei olla tarkkana prosenttien kanssa, on kovin helppo sekoittaa asioita Oikeudenmukaisempi verotus, vahennyspros 58.10 Obs lisasum hlo asema verot uusverot pienverot lisays Sana vahennyspros tuli kuin itsestään ohjelmaan Kyseessähän ei ole oikein laskettu prosenttiluku Miten lieneekään ajattelemattaan koodari laittoi sanan prosentti Jääköön kuulijalle harjoitustehtäväksi pohtia, miten kyseinen luku korjataan prosenttiluvuksi. Ja mitä se oikeastaan tarkoittaa Prosenttina tai sellaisenaan

Yhteenveto SAS datavaihe on hyvin monipuolinen ohjelmointiväline Siihen liittyy monia harvoin käytettyjä ominaisuuksia Joita voi olla hyvä joskus kokeilla ja tutkia Vaan todella monipuolisen välineen muodostavat datavaihe, proseduurit ja makrokieli yhdessä käytettyinä Niitä yhdistämällä voidaan luoda yllättävän monipuolisia ohjelmia

This is the end The Doors