EGENDEFINERTE FUNKSJONER I SAS OG LITT OM OPEN SOURCE INTEGRASJON SAS FANS I STAVANGER 21.10.2015, MARIT FISKAAEN (SAS INSTITUTE)



Like dokumenter
DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN

STORED PROCESS KJØRT FRA SAS VISUAL ANALYTICS FANS I STAVANGER , MARIT FISKAAEN

1. Å lage programmer i C++

1. Å lage programmer i C++

Hvordan installere Java og easyio på Windows

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Debugging. Tore Berg Hansen, TISIP

Før du starter, del 2

Løse reelle problemer

1: Steng ned alle MAB på alle maskiner før dere starter oppdateringen. Dette gjelder også MAB Schedule som dere vil finne på serveren.

Innhold. Kom i gang med IRiR. 1 Installer R & RStudio. 2 Last ned siste versjon av IRiR-skriptet

Lønn 5.0. Veiledning for ASP leverandører

Denne oppgaven innfører funksjoner, og viser hvordan vi kan skrive og teste funksjoner i Ellie.

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Finne ut om en løsning er helt riktig og korrigere ved behov

Fra Python til Java, del 2

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Del 1 En oversikt over C-programmering

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Kapittel 1 En oversikt over C-språket

1 Kodegenerering fra Tau Suiten

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Repetisjon Novice Videregående Python PDF

INF5110. Oblig 2 presentasjon

Bruk av egendefinert kode i SAS Data Integration Studio

Installere JBuilder Foundation i Mandrake Linux 10.0

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

Obligatorisk Innlevering 2

MAT-INF 1100: Obligatorisk oppgave 1

INF Oblig 2 semantikksjekk og kodegenerering

Kom i gang med programmering i Java

ShareCat Bruker Manual

Hangman. Level. Introduksjon

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Læringsmål og pensum. v=nkiu9yen5nc

Kom i gang med emedia

Introduksjon til Eclipse

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

Løse reelle problemer

Installere JBuilder Foundation i Windows XP

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Nine Best Practices for Big Data Dashboards i SAS Visual Analytics Trond Holmen, SAS Norge

Oblig 2 - MAT1120. Fredrik Meyer 23. september 2009 A =

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Brukerveiledning for Web-ADI

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Introduksjon til versjonskontroll av Ola Lie

Steg 1: Regneoperasjoner på en klokke

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Gå til Nedlastninger på menylinjen for Visma Skolelisens og velg Visma Lønn versjon 9.5.

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Hvordan laste ned og installere Java på Windowsplattformen

4. Installasjonsveiledning. Experior - rich test editor for FitNesse -

SAS FANS NYTT & NYTTIG FRA VERKTØYKASSA TIL SAS 4. MARS 2014, MIKKEL SØRHEIM

Løpende strekmann Erfaren Videregående Python PDF

Bruk av kildeavskrifter som er merket med grønn kule

NYHETER I ENTERPRISE GUIDE 7.12

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

Mattespill Nybegynner Python PDF

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Del 4 Noen spesielle C-elementer

TDT4110 Informasjonsteknologi grunnkurs: Uke 41: «Matlab programs» (kapittel 6)

Nedlastning og installasjon av Visma Lønn Gå til Visma Community og logg inn:

Flytte Lønn 5.0 fra SQL 2000 til SQL 2005 / 2008

Shellscripting I. Innhold

Http- og WebServices funksjoner

Øvingsforelesning i Matlab TDT4105

Dagens tema: Enda mer MIPS maskinkode

6105 Windows Server og datanett

For kunder som kjører Huldt & Lillevik Reise 1.3 på Access database

Velkommen til INF2100

Huldt & Lillevik Lønn 5.0. Produktnotat

Installasjonsveiledning Future

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

BEGYNNERKURS I SPSS. Anne Schad Bergsaker 26. april 2018

Løypelegging ved bruk av

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

JS: Grunnleggende JavaScript Nybegynner

PLS PC-øving nr. 2 Trening i programmering

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

Installasjons veiledning for QuickNG SuperService integrasjon

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

Programmeringsspråket C Del 2

Øvingsforelesning i Matlab TDT4105

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Øvingsforelesning i Python (TDT4110)

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

BEGYNNERKURS I SPSS. Anne Schad Bergsaker 17. november 2017

Paul Hinsch. MICADO AS Utviklet MapBasic applikasjoner i 10 år. Registreringsknapper og Objektdialog

OPPGRADERINGS BESKRIVELSE CASIO PREMIUM (ERA) (V-R200 og V-R7x00)

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

og Java

Transkript:

EGENDEFINERTE FUNKSJONER I SAS OG LITT OM OPEN SOURCE INTEGRASJON SAS FANS I STAVANGER 21.10.2015, MARIT FISKAAEN (SAS INSTITUTE)

EGENDEFINERTE FUNKSJONER INNLEDNING 2 På FANS 4. mars 2015 ble det vist hvordan man kan bruke PROC FCMP til å lage egendefinerte funksjoner i SAS (fra SAS 9.2) PROC PROTO kan brukes til å skrive funksjoner i C/C++ og til å linke inn DLL-fil med funksjoner (DLL: Dynamic Link Library). Vi viser hvordan man kan kalle egendefinerte funksjoner fra SAS Data Integration Studio (DIS). PROC FCMP kan også brukes til å lage subrutiner (om man ønsker å returnere mer enn en verdi) Litt om open source integrasjon.

3 PROC FCMP INNLEDNING Hva er proc FCMP? FCMP akronym for Function Compiler Lage funksjoner vha data steg syntaks Kalle funksjonene fra data steg akkurat som man gjør med vanlige SAS funksjoner Nestede funksjoner Fordeler: Mer oversiktlig kode Gjenbrukbare funksjoner Enkelt, ligner en del på egendefinerte funksjoner i Visual Basic

PROC FCMP LAGE FUNKSJONER I PROC FCMP 4 Vise bruk av proc fcmp i EG fra forrige FANS presentasjon: proc fcmp outlib=sasuser.fcmp_fun.functions; function my(a, b, logc, x) label='dødsintensitet for en x-åring'; return ( a + b * 10 ** (logc * x)); endsub; run; options cmplib=sasuser.fcmp_fun; data work.dods_intensitet; my_50=my(0, 0.000027, 0.042, 50); run;

EGENDEFINERTE FUNKSJONER I C/C++ PROC PROTO

PROC PROTO BRUKE C KODE I PROTO 6 proc proto package = sasuser.fcmp_fun.functions; double my_proto(double a, double b, double logc, double x); externc my_proto; double my_proto(double a, double b, double logc, double x) { double r; r = a + b * pow(10, (logc * x)); return r; } externcend; run;

PROC PROTO BRUKE C KODE I PROTO 7 proc fcmp inlib=sasuser.fcmp_fun outlib=sasuser.fcmp_fun.functions; function SAS_my_proto(a,b,logc,x); x=my_proto(a, b,logc,x); return(x); endsub; quit; options cmplib=sasuser.fcmp_fun; data work.dodsint_proto; a=sas_my_proto(0, 0.000027, 0.042, 50); run;

EGENDEFINERTE FUNKSJONER FRA DLL-FIL PROC PROTO

9 PROC PROTO DLL INNLEDNING Laget en dll-fil med Microsoft Visual Studio. Hvordan det kan gjøres er beskrevet i vedlegg. Her viser vi kun en veldig enkel funksjon, for å illustrere hvordan dette kan gjøres. Viser så hvordan man kan bruke PROC PROTO for å kalle funksjoner fra DLL-fila.

PROC PROTO DLL STI FOR DLL OG BIBLIOTEK 10 /* Angi sti for dll-filen: */ %let root = c:\users\normfi\documents\visual studio 2013\Projects\FunksjonerLivsforsikring\x64\Release; /* Definer biblioteket der SAS datasettet som inneholder funksjonene som er deklarert vha. proc proto: */ libname lib "&root";

PROC PROTO DLL LINK TIL DLL 11 /* Bruker PROC PROTO til å definere bibliotek og datasett der funksjonene er lagret:*/ proc proto package=lib.proto_livsf label="funklivsforsikring" stdcall; /* Kopler SAS til DLL'en som inneholder de kompilerte C funksjonene: */ link "&root\funksjonerlivsforsikring.dll" ; /* Deklarerer funksjonene: */ double myx(double a, double b, double logc, double x) label="dødsintensitet for en x-åring"; run;

PROC PROTO DLL PROC FCMP 12 /* Bruker FCMP slik at C funksjonskallene kan brukes i datasteg: */ proc fcmp inlib=lib.proto_livsf outlib=lib.proto_livsf.funklivsforsikring; /* Definerer en wrapper funksjon for hver av C funksjonene: */ function sas_myx(a, b, logc, x); x1=myx(a, b, logc, x); return(x1); endsub; quit; /*Fortelle hvor funksjonene som er kompilert er:*/ options cmplib=lib.proto_livsf;

PROC PROTO DLL LAGE DATASETT MED ALDER 13 /*Datasett med alderene vi vil kalle funksjonen vår for:*/ data work.alderdata; input alder; datalines; 0 10 20 30 40 50 60 70 80 90 100 110 run;

PROC PROTO DLL KALLE FUNKSJONEN FRA DATASTEG 14 /*Makrovariabler, R-63 for menn:*/ %let a=0; %let b=0.000027; %let logc=0.042; /*Kaller C-funksjonen fra datasteg:*/ data work.resultat_myx; set work.alderdata; my_dll = sas_myx(&a, &b, &logc, alder); kontroll_my=0 + 0.000027*10**(0.042*alder); run; proc fcmp listfuncs inlib=lib.proto_livsf; run;

PROC PROTO DLL RESULTAT FRA KJØRING 15

EGNE FUNKSJONER I SAS DI STUDIO

EGNE FUNKSJONER FRA SAS DI STUDIO LAGE FUNKSJON I EG 17 Man kan benytte egendefinerte funksjoner i jobber i SAS Data Integration Studio (DIS). Først laget vi funksjon vha. EG: Vi kunne alternativt valg å legge hele koden som lager funksjonene i en jobb på en UWC node i DIS. Se side 26.

EGNE FUNKSJONER FRA SAS DI STUDIO REGISTRERE TABELLEN I SAS DI STUDIO 18 Vi registrerer tabellen ved å høyreklikk på LIB velg «Register Table» (ellers ser vi ikke tabellen i DIS).

EGNE FUNKSJONER FRA SAS DI STUDIO VI LAGER EN JOBB 19 Valgte UWC node: Legger inn flg. kode:

EGNE FUNKSJONER FRA SAS DI STUDIO LEGGER TIL KOLONNER PÅ TARGET TABELL 20 Husk å legge inn target kolonner. Vi vil se x og myx, velg type «Numeric».

EGNE FUNKSJONER FRA SAS DI STUDIO RESULTAT 21 Kjør jobb Stå på tabell og velg «Open»:

EGNE FUNKSJONER FRA SAS DI STUDIO BRUKE FUNKSJON I EXPRESSION 22 Vi lager ny jobb med «Extract» node: Bruker prekode på node:

EGNE FUNKSJONER FRA SAS DI STUDIO BRUKE FUNKSJON I EXPRESSION 23 Vi mapper alder og legger til kolonnen som vi kaller Myx Myx er numerisk og legger på expression Mapper alder til Myx

EGNE FUNKSJONER FRA SAS DI STUDIO RESULTAT 24

EGNE FUNKSJONER FRA SAS DI STUDIO FUNKSJON BASERT PÅ PROC PROTO 25 Helt tilsvarende kan vi kalle funksjonen fra DLL-filen. I EG kode som vist tidligere med proc proto + fcmp. Så på DI-jobben prekode på extract node: options cmplib=lib.proto_livsf; Så bruker vi funksjonen fra dll-fila:

EGNE FUNKSJONER FRA SAS DI STUDIO JOBB SOM DEFINERER FUNKSJONENE 26 Legger til proc fcmp koden som UWC: Må registrere tabellen FUN i biblioteket LIB for å se den i DIS.

EGNE FUNKSJONER FRA SAS DI STUDIO JOBB SOM KALLER FUNKSJONENE 27

EGNE FUNKSJONER FRA SAS DI STUDIO RESULTAT 28

PROC FCMP SUBRUTINER

30 PROC FCMP SUBRUTINER Vi har sett på egendefinerte funksjoner, men man kan også lage subrutiner vha. PROC FCMP. Mens funksjoner returnerer kun en verdi så kan man vha. subrutiner returnere mer enn en verdi.

PROC FCMP SUBRUTINER - EKSEMPEL 31 proc fcmp outlib=sasuser.fcmp_fun.functions; subroutine my_subrutine(a, b, logc, x, my_sub, test) label='dødsintensitet - subrutine'; outargs a, b, logc, x, my_sub, test; my_sub=( a + b * 10 ** (logc * x)); test=x*2; return; endsub; run; options cmplib=sasuser.fcmp_fun; data work.subrutine_dods_intensitet; a=0; b=0.000027; logc=0.042; x=50; my_sub=.; test=.; call my_subrutine(a, b, logc, x, my_sub, test); run;

PROC FCMP SUBRUTINER - EKSEMPEL 32 Resultat:

OPEN SOURCE INTEGRASJON PROC IML KALLE R

34 PROC IML INNLEDNING SAS Interactive Matrix Language (IML) er en SAS prosedyre, PROC IML. IML er et matrise språk som har innebygd operatorer og funksjoner for de fleste standard matrise operasjoner (f.eks. matrise multiplikasjon, transponering, determinant, invers). Vi vil her se på et enkelt eksempel på multiplikasjon av en vektor med en matrise. Man kan kalle R fra PROC IML.

PROC IML KODE 35 proc iml; *kaller IML; b = {1 2 3}; *1 x 3 vektor; c = {1.0 0 0, 0.2 1.0 0, 0.8 0.4 1.0}; *3 x 3 matrise; d=b*c; *matrise multiplikasjon; print d; *skriver resultat av multiplikasjon; quit; *lukker IML;

PROC IML RESULTAT 36 Resultat EG: Uten IML måtte lage løkke for å multiplisere og summere riktige element:

PROC IML MELDING OM IKKE IML TILGJENGELIG 37

38 PROC IML KALLE R Artikkelen http://wuss.org/proceedings14/85_final_paper_pdf.pdf viser bla. at vi kan kalle R fra proc iml (s. 6): PROC IML; SUBMIT / R; x <- c(1:3) print(x) ENDSUBMIT; QUIT;

PROC IML KALLE R 39 C:\Program Files\SASHome\SASFoundation\9.4

PROC IML KALLE R 40 Grunnen til feilmeldingen var at R ikke var installert på imaget. Nå virker det:

41 PROC IML SJEKKE OM SAS IML ER INSTALLERT / LISENSIERT Sjekke hva som er installert: PROC PRODUCT_STATUS; RUN; Udokumentert prosedyre som forteller hva som er lisensiert: PROC SETINIT; RUN;

OPEN SOURCE INTEGRASJON BASE SAS JAVA OBJECT

OPEN SOURCE INTEGRASJON LINK TIL ARTIKKEL OG FILER 43 Artikkel: https://communities.sas.com /docs/doc-10746 Her finner vi link til filer som kan brukes og her er en pdf som beskriver detaljene SAS_Base_OpenSrcIntegrat ion.pdf

OPEN SOURCE INTEGRASJON FORUTSETNINGER FOR Å FÅ KJØRT DETTE EKSEMPELET 44 Viktig med riktig java versjon. Jeg brukte JDK (Java development kit) 1.7.0. update 15. Installerte Anaconda Python 2.7 og R-3.2.1. Hadde problem med å installere kernlab, men fikk installert den fra Rstudio vha kommandoen install.packages( kernlab ).

OPEN SOURCE INTEGRASJON EKSEMPEL FRA ARTIKKEL 45 Bruker Base SAS Java Object Man har her et R og et Python script Kaller R og Python kode fra sas datasteg. Resultatet av kjøringen av scriptene legges i csv-filer. Resultatene fra csv-filene leses inn til SAS vha PROC IMPORT Bruke disse nye sas datasettene som vanlig i SAS proc er

OPPSUMMERING HOVEDPUNKT

47 OPPSUMMERING HOVEDPUNKT Har man formler som skal programmeres kan det være hensiktsmessig å benytte PROC FCMP. Vi har sett at egendefinerte funksjoner kan brukes på flg. måter: Lage formler direkte i PROC FCMP Bruke C++ kode i PROC PROTO Linke inn DLL-fil i PROC PROTO Jobber man mye med matriser kan SAS IML være nyttig. Vi kan kalle R fra SAS IML. Man kan kalle f.eks. Python og R vha. Base SAS Java Object

VEDLEGG LAGE DLL-FIL

49 VEDLEGG LAGE DLL-FIL 1) Lastet ned Microsoft Visual Studio, gratis fra https://www.visualstudio.com/products/visual-studio-community-vs 2) Åpne Visual Studio og lag et prosjekt: File + New Project Velg: «Win 32 Console Application» og finn et navn (her «FunksjonerLivsforsikring») Velg «DLL» under application settings + Finish. Visual studio solution: C:\Users\normfi\Documents\Visual Studio 2013\Projects\FunksjonerLivsforsikring\ FunksjonerLivsforsikring.sln

50 VEDLEGG LAGE DLL-FIL - FORTS (1) 3. Skriv inn kode. // FunksjonerLivsforsikring.cpp : Defines the exported functions for the DLL application. // #include "stdafx.h" #include <iostream> extern "C" _declspec(dllexport) double _cdecl myx(double a, double b, double logc, double x); //Funksjon for dødsintensiteten til en x-åring double myx(double a, double b, double logc, double x) { double r; r = a + b * pow(10, (logc * x)); return r; }

51 VEDLEGG LAGE DLL-FIL - FORTS (2)

52 VEDLEGG LAGE DLL-FIL - FORTS (3) 4) Velg riktig konfigurasjon. Hvis bruker 64-bit SAS må bruke 64-bit dll.

53 VEDLEGG LAGE DLL-FIL FORTS (4) 5) Bygg DLL-fil. «BUILD» + «Build FunksjonerLivsforsikring» I output-vinduet finner man navnet på DLL-filen: c:\users\normfi\documents\visual studio 2013\Projects\FunksjonerLivsforsikring\x64\Release\FunksjonerLivsforsikring.dll Man kan åpne filen i notepad og søke om man finner myx (den skal være der). Husk å lagre prosjektet. Man kan bruke «Rebuild» for å bygge filen på ny. Tilbake