Introduktionskurs i SAS
|
|
- Vilhelm Sandberg
- för 8 år sedan
- Visningar:
Transkript
1 Introduktionskurs i SAS Del 4 Makroprogrammering
2 Detta material skyddas av upphovsrättslagen och får inte kopieras eller på annat sätt spridas utan upphovsmannens (Knowit Software Solutions AB) skriftliga godkännande. Upphovsmannen har gett sitt godkännande att detta material får fritt användas vid undervisning på Linköpingsuniversitet, IDA. Sidan 2
3 MAKROPROGRAMMERING, EN INTRODUKTION 4 VARFÖR MAKROPROGRAMMERING?... 4 GRUNDLÄGGANDE BEGREPP...4 MAKROVARIABLER... 5 SKAPA MAKROVARIABLER... 5 MER OM ATT TILLDELA MAKROVARIABLER VÄRDEN... 5 ATT REFERERA MAKROVARIABLER... 7 MAKROVARIABELNS REFERERBARA MILJÖ AUTOMATISKA MAKROVARIABLER MAKROFUNKTIONER SKAPA OCH KÖRA MAKRON MAKRON OCH DATASTEG GRÄNSSNITTET MELLAN MAKROVARIABLER OCH DATASTEGET KOMPILERING OCH EXEKVERING ATT AUTOMATISKT REFERERA LAGRADE MAKRON SAS MAKRO OPTIONS OCH DEBUGGING SAMMANFATTNING Makrovariabler Makrofunktioner Makron Sidan 3
4 Makroprogrammering, en introduktion Syftet med detta dokument är att ge en introduktion i SAS -systemets makrospråk, gå igenom vissa makrofunktioner, visa hur makrospråket används för att utöka möjligheterna vid datastegsprogrammering m.m. Texten består av ett antal sektioner som berör olika områden. I texten förekommer rikligt med kodexempel och meningen är att man läser dokumentet på datorn och har SAS igång för att löpande kopiera över kod-exemplen till SAS och provköra och studera resultaten. Dokumentet är uppdelat i följande avsnitt: MAKROVARIABLER MAKROFUNKTIONER MAKRON MAKRON OCH DATASTEG KOMPILERING OCH EXEKVERING MAKRO OPTIONS, DEBUGGING SAMMANFATTNING Kommentar: SAS makromanual är mycket bra och går snabbt att ta sig igenom. Använd den! Varför makroprogrammering? Generalisera koden Göra koden repetitiv Villkora koden Utföra mer komplicerad programmering Förenkla Göra datasteget mer likt vanlig programmering, dynamiskt generera delar av eller hela datasteg Grundläggande begrepp SAS makrofunktionalitet är i princip ett sätt att lagra, generera och skriva text. Eftersom denna text kan skrivas till SAS programbuffert kan man exekvera saskod som genererats i ett makro. Det finns en uppsättning funktioner och kommandon tillgängliga. Dessa anropas genom att skriva ett procenttecken före namnet. Kommandot PUT anropas alltså genom att skriva %PUT. Makrovariabler (gås igenom nedan) löses upp genom att skriva ett &-tecken framför namnet på variabeln. Genom att skriva &mvar kommer makrovariabeln mvar att lösas upp. Makron kompileras genom att exekvera makrokoden. När makrokoden är kompilerad skapas ett makroentry i katalogen WORK.SASMACRO som alltså är temporär. Ett kompilerat makro exekveras på samma sätt som funktioner och kommandon, dvs genom att skriva ett %-tecken framför makronamnet. Sidan 4
5 Makrovariabler SKAPA MAKROVARIABLER För att skapa en makrovariabel fristående (dvs. utanför ett makro) används kommandot %LET och visas i loggen med %PUT. %LET gnu=hej; %PUT &gnu; För att skapa en makrovariabel i ett datasteg används funktionen SYMPUT: skapa först ett testdataset: data tst; txt= Hej ; do i=1 to 5; output; end; lägg ut värdet i nobs (antal observationer) på sista posten i makrovariabeln gnu och variabeln txt i makrovariabeln gnu2, visa dem i loggen: data _null_; set tst nobs=nobs; if _n_=nobs then do; call symput('gnu',put(nobs,2.)); call symput( gnu2,txt); end; %PUT &gnu; Kommentar: eftersom makrovariabler alltid bara lagrar text, inte numeriska värden, måste den numeriska variabeln nobs formatteras som text, vilket görs med funktionen PUT(). Om en textvariabel, som txt, ska läggas ut i en makrovariabel, skriver man bara variabelnamnet. MER OM ATT TILLDELA MAKROVARIABLER VÄRDEN Makrovariabler tilldelas värden som visas ovan, med %LET eller SYMPUT. För att inledande eller avslutande blanka positioner ska lagras i en makrovariabel måste man uttryckligen ange detta genom att använda funktionen %STR() som returnerar argumentet som en teckensträng: %LET gnu= Hej; %LET hepp= Hej ; Sidan 5
6 %LET hupp=%str( )Hej; %PUT &gnu; %PUT &hepp X; %PUT &hupp; resulterar i att följande skrivs till loggen: Hej Hej X Hej Makrovariabler hanteras normalt som strängar men kan användas i aritmetiska operationer i vissa speciella fall. Följande exempel resulterar bara i att strängen 2+5 läggs i makrovariabeln hepp: %LET hepp=2+5; %PUT &hepp; 2+5 För att lagra resultatet av additionen krävs att man använder makrofunktionen %EVAL: %LET hepp=%eval(5+2); %PUT &hepp; 7 Tänk på att %EVAL endast hanterar heltal, följande operation resulterar i sas-error: %LET hepp=%eval(5+2.5); ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: och följande division returnerar endast heltalsdelen: %LET hepp=%eval(5/2); %PUT &hepp; 2 För att klara av denna operation finns en ny makrofunktion %SYSEVALF (SAS 6.12+) som klarar av detta, men glöm inte att resultatet förblir en textsträng. %LET hepp=%sysevalf(5/2); %PUT &hepp; 2.5 Eftersom man kan lagra upp till tecken i en makrovariabel går det att lagra hela SAS statements i macro variabler. Detta är mycket användbart. Man kan på detta sätt enkelt och dynamiskt generera upp sas-satser och exekvera bara genom att lösa upp variabeln: %LET hepp=%str( data tst; var2= Hej ; do var1=1 to 10; Sidan 6
7 output; end; &hepp; proc print data=tst; var var1 var2; ); Kommentarer: Här måste funktionen %STR användas eftersom sas annars skulle tolka första semikolonet i strängen som att satsen avslutades, dvs att bara det som står innan första semikolonet skulle läggas i variabeln. Om man ger en macro variabel värdet null tolkar SAS dess referens som ingenting och den ignoreras därmed. %LET hepp1=var1; %LET hepp2=; proc print data=tst; var var2 &hepp1 &hepp2 var3; Resultatet av dessa två fall blir följande var-statement: var var2 var1 var3; ATT REFERERA MAKROVARIABLER Makrovariabler refereras/löses upp genom att skriva ett &-tecken framför namnet på variabeln. Makrovariabler löses inte upp inom fnuttar( ) men inom dubbel-fnuttar( ): %LET hepp=hej; %PUT &hepp; Hej %PUT '&hepp'; '&hepp' %PUT "&hepp"; "Hej" När makroprocessorn stöter på en makroreferens (&) så antar den att variabelns namn är alla påföljande tecken tills dess den hittar ett tecken som inte kan vara del av ett SAS-namn t.ex. &, %, BLANK. Makroprocessorn använder en punkt (.) som explicit avgränsare för variabelnamn. Detta används för att indikera att ett macrovariabelnamn slutar, om det ej är självklart. Sidan 7
8 Nedan finns ett exempel där man har en gemensam del av variabelnamnen i en makrovariabel, vilket är mycket användbart om man refererar variablerna på många ställen i ett program. Om variablerna byter namn från var1-varn till x1-xn behöver man bara uppdatera programmet på ett ställe. Målet är alltså att var1 etc. ska skrivas till programbufferten. Felaktigt exempel: %LET hepp=var; proc print data=temp; var &hepp1 &hepp2; WARNING: Apparent symbolic reference HEPP1 not resolved. ERROR: Variable HEPP1 not found. ERROR : The symbol is not recognized. NOTE: The SAS System stopped processing this step because of errors. Kommentar: Eftersom 1 och 2 är godkända tecken i ett sas-namn antar makroprocessorn att den ska lösa upp en variabel vid namn hepp1 och en vid namn hepp2 och några sådana variabler existerar inte här. Man måste explicit berätta för SAS att variabelnamnet slutar innan siffran genom att lägga till en punkt: proc print data=temp; var &hepp.1; Kommentar: punkten skrivs alltså inte ut. I ovanstående exempel kommer SAS skriva var1, som önskat. Makroprocessorn använder sig av s.k. forward scan och löser upp varje makroreferens den stöter på i tur och ordning. Därför kan man behöva tvinga makroprocessorn att scanna en referens flera gånger genom att använda flera &-tecken: I nedanstående exempel vill man slutligen lösa upp variablerna v1 och v2, men variabelnamnet ska först komponeras genom att använda en annan makrovariabel som innehåller siffran: Först ett felaktigt exempel: %LET v1=var1; %LET v2=var2; %LET i=1; proc print data=tst; var &v&i; %LET i=2; proc print data=tst; var &v&i; -vilket resulterar i error: Sidan 8
9 WARNING: Apparent symbolic reference V not resolved. 107 &v&i; ERROR: Variable V1 not found. ERROR : The symbol is not recognized. NOTE: The SAS System stopped processing this step because of errors. NOTE: The PROCEDURE PRINT used 0.02 seconds. Kommentar: Eftersom makroprocessorn antar att alla tecken efter &-tecknet är namnet på variabeln den ska lösa upp, kommer den bara till nästa &-tecken och antar att den ska lösa upp variabeln v som inte finns (se sas-varningen). Därmed lämnar makrogeneratorn denna och försöker lösa upp nästa variabel. Detta går bra eftersom variabeln i existerar och innehåller 1. SAS kommer därmed skriva &v1 till programbufferten. & kan inte tolkas och SAS ger ett felmeddelande och fortsätter med resten, dvs v1 vilket är OK syntaxmässigt, men variabeln existerar inte i datasetet, och SAS ger ytterligare ett felmeddelande. För att makrogeneratorn först ska lösa upp i till 1 och sen lösa upp variabeln v1 krävs att man får SAS att scanna två gånger. En gång för att lösa upp i och en för att sedan lösa upp v1. För att åstadkomma detta inleds satsen med två &-tecken: %LET i=1; proc print data=tst; var &&v&i; %LET i=2; proc print data=tst; var &&v&i; Sidan 9
10 MAKROVARIABELNS REFERERBARA MILJÖ När ett makro exekveras som skapar makrovariabler utan att dessa explicit deklareras som lokala eller globala försöker makroprocessorn att ändra värdet på en existerande makrovariabel hellre än att skapa en ny variabel, oavsett vilken miljö man befinner sig i. För att explicit deklarera variabler lokala eller globala används makrosatserna %GLOBAL och %LOCAL. När ett makro skapar en makrovariabel och det inte finns någon variabel med det namnet i någon miljö så skapas variabeln i pågående miljön vilket innebär i det aktuella makrot och i alla submakron som anropas från det lokala. %GLOBAL skapar en makrovariabel i den globala miljön oavsett vilken miljö man befinner sig i. %LOCAL skapar en makrovariabel i den pågående miljön, oavsett om det finns någon med samma namn i någon annan miljö. För att vara säker på att inte av misstag uppdatera en makrovariabel i någon överliggande miljö bör man ha för vana att explicit deklarera alla lokala makrovariabler med %LOCAL. SYMPUT rutinen är ett specialfall som skapar makrovariabeln i den första icke-tomma miljön den träffar på (dvs en miljö som innehåller åtminstone en annan makrovariabel. Följande figurer illustrerar detta. I exemplet uppdateras den globala variabeln HEPP i makrot GNU. Följande programexempel visar samma sak: %LET hepp=hej; %PUT &hepp; %MACRO GNU; %let hepp=då; *hepp skapas i den globala miljön och sätts till Hej; *skapa makrot gnu som uppdaterar hepp och skapar hupp*; Sidan 10
11 %LET hupp=tjosan; %PUT &hepp &hupp; %MEND; %gnu; %PUT &hepp; *slut på makrot*; *kör makrot GNU; I detta exempel definieras hepp explicit som lokal i makrot GNU. Detta förhindrar att den globala hepp-variabeln uppdateras. Hupp definieras explicit som global och går därför att referera även efter att makrot körts: %LET hepp=hej; %PUT &hepp; %MACRO GNU; %LOCAL hepp; %GLOBAL hupp; %LET hepp=då; %LET hupp=tjosan; %PUT &hepp &hupp; %MEND; %gnu; %PUT &hepp &hupp; *hepp skapas i den globala miljön och sätts till Hej; *skapa makrot gnu som uppdaterar hepp och skapar hupp; *slut på makrot; *kör makrot GNU; Makrovariabler skapade i en miljö kan refereras i alla underliggande miljöer men inte i överliggande. %LET hepp=hej; %MACRO gnu; %MACRO zebra; %PUT &hepp; *zebra löser upp hepp; Sidan 11
12 %MEND zebra; %LOCAL hepp; %LET hepp=då; %zebra; %MEND gnu; %gnu; Då %PUT &hepp; Hej *hepp deklareras som lokal i gnu och sätts till Då; *kör zebra; *kör gnu; AUTOMATISKA MAKROVARIABLER SAS har ett antal automatiska makrovariabler som uppdateras av systemet och enkelt refereras som en vanlig makrovariabel, dvs &namn. Ett urval av automatiska makrovariabler: &SYSDATE datum då sessionen startade &SYSTIME tid så sessionen startade &SYSDAY veckodag &SYSERR returkod från SAS procedurer (0=OK, 1&2=proc avbruten av anv, 4=Varning, >4=error) &SYSINFO mer utförlig returkod som ges av vissa procedurer. Värden, se resp proc dokumentation &SYSRC returkod från operativsystemkomandon &SYSVER SAS version &SYSLAST levererar referensen till datasetet _LAST_ Sidan 12
13 Makrofunktioner Det finns ett antal makrofunktioner i SAS. Eftersom makrofunktionen främst är ett verktyg för att generera textsträngar handlar de flesta funktionerna om stränghantering. Här kommer kortfattade beskrivningar av några funktioner. %STR(argument): används när man vill hantera en sträng som innehåller tecken som inte går att skriva i öppen kod. %LET myvar=%str(put;put;put;); %PUT &myvar; skriver följande till loggen. put;put;put; prova gärna följande variant som visar vilket problem %STR löser: %LET myvar=put;put;put; ; %PUT &myvar; %SUBSTR(argument,startpos,längd): returnerar tecknen fr.o.m. startpos. och längd positioner framåt från argument. %LET x= ; %LET myvar=%substr(&x,4,3); %PUT &myvar; skriver följande till loggen: 456 %SCAN(argument,ord nr, avgränsande tecken): returnerar ord enligt ord nr från argument där ord definieras som strängar avgränsade av avgränsande tecken. %LET x=en liten mening med en massa ord; %LET myvar=%scan(&x,4,%str( ) ); %PUT &myvar; skriver följande till loggen: med %INDEX(argument, delsträng): returnerar första positionen där delsträng förekommer i argument. Hittas inte delsträngen returneras 0. %LET x=ännu en mening med en massa ord; %LET myvar=%index(&x,me); %PUT &myvar; Sidan 13
14 skriver följande till loggen: 9 %EVAL(heltalsoperation): returnerar resultatet av heltalsoperation. Observera att den bara hanterar heltal och bara returnerar heltalsdelen av operationen om den resulterar i ett decimaltal! Se sidan %SYSEVALF(räkneoperation): returnerar resultatet av en räkneoperation. Denna funktion klarar av decimalresultat. Finns i SAS Vidare finns ett flertal funktioner för att utföra en rad olika quotings av strängar. Dessa gås ej igenom här, se SAS online hjälp under main menu/sas language/macro facility eller makromanualen. Sidan 14
15 Skapa och köra makron Ett makro inleds med %MACRO NAMN och avslutas med %MEND NAMN. Makrot körs sedan med satsen %NAMN. Makrot kompileras när programmet körs (submittas i SAS) första gången och kan sen användas hur många gånger som helst under sessionen. (Ett semikolon efter makronamnet går också bra när man skall köra det men i vissa fall kan det vara betydelsefullt att det egentligen inte behövs.) %MACRO test; %PUT Idag är det &SYSDAY; %MEND test; %test; Idag är det Sunday %test; Idag är det Sunday Makros kan definieras med parametrar som kan ha ett förvalt (default) värde. Parametrarna kan anges positionsvis eller namnvis med sk. positional eller keyword parameterar. Positional parametrar måste alltid komma före keyword-parametrar i en parameter lista. I makrot PARM finns två positionella parametrar pos1 och pos2. Att de är positionella visas av att de ej följs av ett =. Två keyword parametrar finns också, keyw1 och keyw2 %MACRO parm(pos1,pos2,keyw1=,keyw2=5); %DO i=1 %TO &keyw2; %IF &keyw1<&keyw2 %THEN %DO; %PUT &pos1 &pos2; %ELSE %DO; %PUT &pos2 &pos1; %MEND parm; %PARM(Hej,Då,keyw1=3); Hej Då Hej Då Hej Då Hej Då Hej Då %parm(hej,då,keyw2=2,keyw1=3); Då Hej Då Hej Sidan 15
16 Makroprocessorn genererar text som beroende på hur texten ser ut vidarebefordras till SASkompilatorn och detta gör att friheten vad som tillåts att skriva i ett makro är ganska stor. Man behöver t.ex. inte alltid skriva fullständiga programsatser som avslutas med semikolon. Man kan låta ett makro bara generera ett antal ord. %MACRO test(x); %DO i=1 %TO &x; var&i %IF &x>2 and &i=&x %THEN %DO; ; by sort %MEND test; proc print data=temp; var %test(3); /* Dvs. var1 var2; om x<3 */ /* och var1 var2... ; by sort; om x >= 3. */ Beroende på sitt sätt att arbeta kan makroprocessorn låta ett makro fungera som inte bara en skapare av text eller datastegskod utan som program block som har karaktären av en procedur eller en funktion i traditionell programmering. Hur makrot fungerar är bara en fråga om hur det skrivs. Exempel på ett makro som fungerar som en generell procedur som skapar ett dataset temp om det inte är en torsdag. %MACRO prosce; %IF &SYSDAY=Thursday %THEN %DO; data temp; set tst; var4=var1+var3; %ELSE %PUT Today is &SYSDAY; %MEND prosce; %prosce; proc print; quit; Exempel på ett makro som fungerar som en funktion med en parameter (positionell). Makrot skriver 10 eller 100 till programbufferten beroende på vilken veckodag det är. %MACRO funk(day); %IF &DAY=Sunday %THEN %DO; 10 %ELSE %DO; 100 %MEND funk; Sidan 16
17 data temp; set temp; var4=var1+%funk(&sysday); proc print; Sidan 17
18 Makron och datasteg Makrofunktionen i SAS är ett verktyg som möjliggör för användaren att kunna vara repetitiv över hela datasteget och inte bara över delar av datasteget som blir fallet om man bara använder datastegsprogrammering. Makrofunktionen ger också möjlighet att villkora hela datasteget. Därmed kan man via makrofunktionen skapa hela applikationer. Ett makro som sorterar dataseten temp1-temp3 eller skriver ut datasetet temp. Dessutom ges ett felmeddelande till loggen om ett felaktigt parametervärde ges. %MACRO repet(parm); %IF &parm eq SORT %THEN %DO; %DO i=1 %TO 3; proc sort data=temp out=temp&i; by var&i; %ELSE %DO; %IF &parm eq PRINT %THEN %DO; proc print data=temp; %ELSE %DO; %PUT Note: Makrot hanterar inte parametervärdet &parm; %MEND repet; %repet; %repet(sort); NOTE: The data set WORK.TEMP1 has 5 observations and 4 variables. NOTE: The data set WORK.TEMP2 has 5 observations and 4 variables. NOTE: The data set WORK.TEMP3 has 5 observations and 4 variables %repet(print); 2993 %repet(hej); Note: Makrot hanterar inte parametervärdet HEJ Inne i ett makro är dessutom friheten avsevärd vad gäller att blanda makrosatser och datastegsatser. Vad som går är nästan bara att prova sig fram till. Generellt kan man dock säga att det går bra att utföra en viss datastegsats beroende på utfallet av en makrosats men det går inte att utföra en viss makrosats beroende på utfallet av en viss datastegsats. Följande makro är ett exempel på hur man kan låta ett makro generera upp DELAR av ett datasteg dynamiskt beroende på en eller flera inparametrar. %MACRO namn(namn); data namn; do i=1 to 10; %IF &namn eq KALLE %THEN %DO; fnamn="&namn"; Sidan 18
19 enamn='anka'; %ELSE %DO; fnamn='musse'; enamn='pigg'; output; end; %MEND namn; %namn(kalle); NOTE: The data set WORK.NAMN has 10 observations and 3 variables. 27 %namn(musse); NOTE: The data set WORK.NAMN has 10 observations and 3 variables. Detta makro är ett exempel på hur ett makro dynamiskt genererar upp delar av ett datasteg beroende på värden på globala makrovariabler (i stället för parametrar som skickas med till makrot) %LET k=100; %LET l=1000; %LET i=7; %MACRO n; data gfriend; set namn; length summa 8; %IF &i=7 %THEN %DO; summa=%eval(&k+&l); girl='mimmi'; %MEND n; %n; NOTE: The data set WORK.GFRIEND has 1 observations and 2 variables. NOTE: The DATA statement used 0.1 seconds. Ett exempel på hur man kan använda ett makro för att villkora DELAR av enskilda satser i ett datasteg. %MACRO dec(yesno); data dec&yesno; format dectal %IF &yesno eq YES %THEN %DO; 6.2 %ELSE %DO; 6. ; do i=1 to 10; dectal=i/2; output; end; %MEND dec; %dec(yes); NOTE: The data set WORK.DECYES has 10 observations and 2 variables. %dec(no); NOTE: The data set WORK.DECNO has 10 observations and 2 variables. Sidan 19
20 GRÄNSSNITTET MELLAN MAKROVARIABLER OCH DATASTEGET Även om man generellt inte kan låta en viss makrosats utföras beroende på utfallet från en datastegsats så kan man så att säga öppna ett fönster mellan datasteget och makroprocessorn med hjälp av SYMPUT och SYMGET funktionerna. Med dessa kan man hämta in värden från makrovariabler till datasteget med SYMGET och placera värden från datasteget i makrovariabler. Med andra ord kan man låta ett datasteg uppdatera en makrovariabel och sedan låta denna makrovariabel styra exekveringen i ett eller flera makron. På så sätt kan man i viss utsträckning alltså även styra makron från datasteg. Exempel på hur man hämtar in makrovariabler till ett datasteg med hjälp av funktionen symget: %LET x1=kalle; %LET x2=anka; %MACRO smgt; data twofig; set namn; if mod(_n_,2)=0 then do; fnamn=symget('x1'); enamn=symget('x2'); end; %MEND smgt; %smgt; NOTE: The data set WORK.TWOFIG has 10 observations and 3 variables. Ett exempel på hur ett datasteg uppdaterar makrovariabler med SYMPUT. %MACRO smpt; data twofig; set namn; if fnamn='musse' then call symput('x1','mimmi'); else call symput('x2','kajsa'); %PUT &x1 &x2; %MEND smpt; *-Kör makrot -*; %smpt; Man kan till och med symputta ut ett variabelvärde för att sedan hämta in det i en annan sats. %LET x1=knatte; %LET x2=fnatte; %MACRO smptgt; data twofig2; set twofig; if fnamn='musse' then call symput('x1','mimmi'); else call symput('x2','kajsa'); if fnamn='musse' then girl=symget('x1'); Sidan 20
21 else girl=symget('x2'); %MEND smptgt; *-Kör makrot -*; %smptgt; Sidan 21
22 Kompilering och exekvering Ett makro kompileras genom att SUBMITTA koden. Efter kompilering sparas det kompilerade makrot som en katalog medlem i SAS-katalogen SASMACR i WORK biblioteket. Därifrån är makrot sedan tillgängligt under sessionen och exekveras genom att man ger dess namn som ett makrokommando (%NAMN). Detta innebär vidare att man också kan ta bort makrot från WORK om man vill städa efter sig. Detta görs genom att använda PROC CATALOG. Vidare möjliggör det också att distribuera enbart kompilerade makron till användare (så att källkoden skyddas). *- Ta bort makrot SMPTGT från sasmacr katalogen -*; proc catalog catalog=work.sasmacr entrytype=macro; delete smptgt; quit; När ett makro exekveras sker ett återkommande samspel mellan makroprocessorn och SAS systemet. När word-scannern stöter på en makroreferens el. dyl. lämnas kontrollen över till makroprocessorn som exekverar makrosatser. Den SAS-text makrosatserna genererar läggs till i input stacken som därefter exekveras av SAS systemet. Detta samspel förklarar vad SAS kommer att se när ett makro körs. I bilderna nedan visas vad SAS ser i den högra stacken och vad makroprocessorn hanterar i den vänstra. Exemplet är trivialt, men illustrerar samspelet mellan kompilatorn och makroprocessorn. Sidan 22
23 ATT AUTOMATISKT REFERERA LAGRADE MAKRON Eftersom SASMACR katalogen förvalt ligger i WORK är den temporär och måste skapas för varje ny SAS-session. Det finns fler metoder för att slippa att manuellt kompilera upp makron inför varje session. Frågan är om man vill att SAS automatiskt ska kompilera upp befintliga makron som antingen ligger lagrade i textfiler eller som SOURCE-medlemmar i en katalog, eller om man vill att SAS ska referera redan kompilerade makros som ligger som MACRO-medlemmar i en katalog. Den senare metoden innebär att man kan leverera en uppsättning kompilerade makron i ett system så att källkoden till dessa är skyddade. De två alternativen implementeras som följer: För att SAS automatiskt ska kompilera ett makro (källkod) när det refereras används följande options: options MAUTOSOURCE SASAUTOS=(libname1 eller sökväg1...) För att SAS ska referera redan kompilerade makron i en SASMACR katalog i ett permanent SAS bibliotek används följande options: options MSTORED SASMSTORE=libname Om ett makro sedan anropas med %makronamn kommer SAS först kontrollera om makrot finns i WORK.SASMACR, sedan i libname.sasmacr och köra den första versionen som hittas. Sidan 23
24 SAS makro options och debugging För att debugga ett makro finns ett antal användbara options som man kan sätta i SAS. Samtliga options stängs av genom att skriva options Nooptionnamn; Option MPRINT gör att SAS skriver de SAS-satser ett macro producerar till loggen. Detta är mycket användbart eftersom det ibland kan bli rätt svårt att genomskåda vilka SAS-satser ett makro verkligen har genererat. options mprint; %MACRO test; %IF &SYSDAY=Thursday %THEN %DO; %DO i=1 %TO 2; proc summary data=temp; var var&i; output out=temp&i mean=mvar&i; %MEND test; *-Kör makrot-*; %test; FÖLJANDE TEXT SKRIVS TILL LOGGEN (Om det råkar vara torsdag, annars genererar makrot ingenting i exemplet ovan): MPRINT(TEST): MPRINT(TEST): MPRINT(TEST): MPRINT(TEST): PROC SUMMARY DATA=TEMP; VAR VAR1; OUTPUT OUT=TEMP1 MEAN=MVAR1; RUN; NOTE: The data set WORK.TEMP1 has 1 observations and 3 variables. NOTE: The PROCEDURE SUMMARY used 0.22 seconds. MPRINT(TEST): MPRINT(TEST): MPRINT(TEST): MPRINT(TEST): PROC SUMMARY DATA=TEMP; VAR VAR2; OUTPUT OUT=TEMP2 MEAN=MVAR2; RUN; NOTE: The data set WORK.TEMP2 has 1 observations and 3 variables. NOTE: The PROCEDURE SUMMARY used 0.22 seconds. Kommentar: Förutom att man på detta sätt kan läsa i klartext vad makrogeneratorn genererat till SAS, kan det ibland vara praktiskt att kunna testa stegvis vad ett makro har genererat för att se vart det gick fel. Genom att använda option MPRINT och helt enkelt kopiera in delar av loggen till programeditorn och ta bort MPRINT( ) på varje rad kan man köra de steg som makrot genererat. Ibland mycket användbart. SASoption MLOGIC skriver i loggen vilka macrosatser som utförs, hur loopar itererar och hur villkor faller ut (sant/falskt). Sidan 24
25 *-Stäng av MPRINT, sätt på MLOGIC-*; options nomprint mlogic; *-Kör samma makro som ovan-*; %test; FÖLJANDE TEXT SKRIVS TILL LOGGEN (Om det är torsdag): MLOGIC(TEST): Beginning execution. MLOGIC(TEST): %IF condition &sysday=thursday is TRUE MLOGIC(TEST): %DO loop beginning; index variable I; start value is 1; stop value is 2; by value is 1. NOTE: The data set WORK.TEMP1 has 1 observations and 3 variables. NOTE: The PROCEDURE SUMMARY used 0.22 seconds. MLOGIC(TEST): %DO loop index variable I is now 2; loop will iterate again. NOTE: The data set WORK.TEMP2 has 1 observations and 3 variables. NOTE: The PROCEDURE SUMMARY used 0.27 seconds. MLOGIC(TEST): %DO loop index variable I is now 3; loop will not iterate again. MLOGIC(TEST): Ending execution. SASoption SYMBOLGEN visar vilket värde en makrovariabel löser upp till när den används. options nomlogic symbolgen; %test; SYMBOLGEN: Macro variable SYSDAY resolves to Thursday SYMBOLGEN: Macro variable I resolves to 1 SYMBOLGEN: Macro variable I resolves to 1 SYMBOLGEN: Macro variable I resolves to 1 NOTE: The data set WORK.TEMP1 has 1 observations and 3 variables. NOTE: The PROCEDURE SUMMARY used 0.22 seconds. SYMBOLGEN: Macro variable I resolves to 2 SYMBOLGEN: Macro variable I resolves to 2 SYMBOLGEN: Macro variable I resolves to 2 NOTE: The data set WORK.TEMP2 has 1 observations and 3 variables. NOTE: The PROCEDURE SUMMARY used 0.33 seconds. Kommentar för MLOGIC och SYMBOLGEN: Dessa options genererar vanligtvis rätt stora loggar eftersom det är mycket text som ska skrivas ut. Ofta vet man ungefär vart i makrot det går snett och vilken/vilka makrovariabler man vill se för att kunna reda ut problemet. I dessa fall kan det vara bättre att själv manuellt lägga in %PUT-satser i makrot på lämpliga ställen. Loggen blir betydligt mer lättläst på detta sätt. Ett litet exempel på ett lite krångligare och mer svårgenomskådligt exempel nedan: %MACRO test(inparm); %LET x=%eval(%substr(&systime,4,2)/10); %PUT ******* X-variabeln innan loopen: &x ******; Sidan 25
26 %DO i=1 %TO 10; %IF &inparm=3 and &x>0 %THEN %LET i=10; %LET x=%eval(&inparm/%substr(&sysdate,1,1)); %PUT ******* X-variabeln efter loopen: &x ******; %MEND test; MAKROT TESTKÖRS SEDAN MED LITE OLIKA INPARAMETERVÄRDEN FÖR ATT SE HUR DET BETER SIG OCH FÖLJANDE SKRIVS TILL LOGGEN: %test(3); ******* X-variabeln innan loopen: 3 ****** ******* X-variabeln efter loopen: 1 ****** 31 %test(2); ******* X-variabeln innan loopen: 3 ****** ******* X-variabeln efter loopen: 1 ****** 32 %test(34); ******* X-variabeln innan loopen: 3 ****** ******* X-variabeln efter loopen: 17 ****** Debugging tips Om makrot inte gör något alls leta efter uteblivna %END. Använd %PUT för att se vad macro variabler är. Glöm inte att skilja på %PUT (makrokod) och PUT (i datasteg). Om makrot inte vill kompileras ordentligt leta efter uteblivna %. Sidan 26
27 Sammanfattning Makrovariabler innehåller textsträngar och kan användas för att infoga text i SAS-kod kan användas i heltalsberäkningar med hjälp av funktionen %EVAL kan vara lokala eller globala. Förvalda som globala om dom skapas utanför ett makro, förvalda som lokala om de skapas i ett makro (och de inte redan finns som globala). SAS ger en rad automatiska makrovariabler Makrofunktioner SAS har en rad makrofunktioner, de flesta rör stränghantering funktionen %EVAL används för att beräkna ett uttryck, men hanterar bara heltal och returnerar bara heltalsdelen av uttrycket Makron kan användas för att villkora utseendet på datasteg och proceduranrop inför ett visst mått av traditionell programmering i datasteget Använd options MPRINT, MLOGIC, SYMBOLGEN samt egna %PUT-satser för debugging kompileras genom submit och sparas sedan som ett entry i katalogen WORK.SASMACR kan kompileras automatiskt genom att använda options SASAUTOS/MAUTOSOURCE= kan sparas som kompilerad MACRO medlemmar i en katalog för att sedan automatiskt refereras med hjälp av options MSTORED SASMSTORE Sidan 27
Introduktion till Jasmine 1.2 ODQL
Introduktion till Jasmine 1.2 ODQL I detta avsnitt beskrivs ett antal praktiska handgrepp som behövs för att köra Jasmine ODQL. 1 ODQL miljön Man kan enklast köra ODQL mot Jasmine från ett vanligt Command
Läs merObjektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6
Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner
Läs mer4. Kunna orientera sig mellan de olika fönstren
Datorövning 1 Statistikens Grunder 1 Syfte 1 Lära sig läsa in data i SAS 2 Importera data från Excel 3 Lära sig skriva ut data med proc print 4 Kunna orientera sig mellan de olika fönstren Exempel Att
Läs merStatistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs
Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs TE/RC Datorövning 1 Syfte: 1. Lära sig läsa in data i SAS 2. Importera data från Excel 3. Lära sig skriva ut data med proc print 4. Kunna orientera
Läs merMålet för D1 är att studenterna ska kunna följande: Använda några av de vanligaste PROC:arna. Sammanställa och presentera data i tabeller och grafiskt
Datorövning 1 Statistisk teori med tillämpningar Repetition av SAS Syfte Syftet med Datoröving 1 (D1) är att repetera de SAS-kunskaperna från tidigare kurser samt att ge en kort introduktion till de studenter
Läs merFöreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt
Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling
Läs merProgrammering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
Läs merKompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Läs merProgrammera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Läs merIDA kursmaterial Informationsblad make. make
make make är ett verktyg som främst används för att underhålla, uppdatera och återskapa program och filer. Det är dock ett generellt verktyg som kan användas även i många andra sammanhang. En avancerad
Läs merFöreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Läs merGrundläggande datalogi - Övning 1
Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Läs merFöreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?
Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?
Läs merKlassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Läs merÖversikt över Visual Basic
Översikt över Visual Basic Om denna översikt Denna översikt ger en kort introduktion till de viktigaste delarna i programspråket Visual Basic 6.0. På alla ställen där det beskrivs hur man skriver kod gäller
Läs merLabb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt
Läs merStatistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs
Statistikens grunder och 2, GN, hp, deltid, kvällskurs TE/RC Datorövning 3 Syfte:. Lära sig göra betingade frekvenstabeller 2. Lära sig beskriva en variabel numeriskt med proc univariate 3. Lära sig rita
Läs merDatatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Läs merIntroduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser
Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och
Läs merLaboration 1 Introduktion till Visual Basic 6.0
Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.
Läs merAnvända några av de vanligaste PROC:arna. Sammanställa och presentera data i tabeller och grafiskt
Datorövning 1 Statistisk teori med tillämpningar Repetition av SAS Syfte Syftet med Datoröving 1 (D1) är att repetera de SAS-kunskaperna från tidigare kurser samt att ge en kort introduktion till de studenter
Läs merProgrammering I Tobias Wrigstad fredag, 2009 augusti 28
Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,
Läs merMultipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion
Introduktion till programmering D0009E Föreläsning 6: Iteration Multipel tilldelning Helt ok att tilldela en variabel flera gånger: bruce = bruce, bruce = 7 bruce Output: 7 Som tillståndsdiagram: bruce
Läs merFöreläsning 5: Introduktion av pekare
Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men
Läs merAnvändarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
Läs merNågra inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.
Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0
Läs merObjektorienterad programmering Föreläsning 2
Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade
Läs merFöreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk
Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program
Läs merPlanering Programmering grundkurs HI1024 HT TIDAA
Planering Programmering grundkurs HI1024 HT 2016 - TIDAA Föreläsning V35 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning
Läs merAtt deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)
Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet
Läs merF4. programmeringsteknik och Matlab
Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner
Läs merProgrammering i C++ Kompilering från kommandoraden
Programmering i C++ Kompilering från kommandoraden Sven Gestegård Robertz Datavetenskap, LTH 9 november 2015 Sammanfattning Ibland vill man, av olika anledningar, inte använda en stor integrerad utvecklingsmiljö
Läs merIntroduktionskurs i SAS. Del 1 Datastegsprogrammering
Introduktionskurs i SAS Del 1 Datastegsprogrammering Detta material skyddas av upphovsrättslagen och får inte kopieras eller på annat sätt spridas utan upphovsmannens (Knowit Information Management) skriftliga
Läs merIntroduktion till programmering och Python Grundkurs i programmering med Python
Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?
Läs merKPP053, HT2015 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner
KPP053, HT2015 MATLAB, Föreläsning 1 Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner MATLAB Väletablerat Mycket omfattande program GNU OCTAVE Öppen
Läs merIntroduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner
Läs merPlanering Programmering grundkurs HI1024 HT 2014
Planering Programmering grundkurs HI1024 HT 2014 Föreläsning V36 Föreläsning 1 Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande- Interpreterande Programmeringsmiljö Hello World! Att
Läs merUniversitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch
Läs merKPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner
KPP053, HT2016 MATLAB, Föreläsning 1 Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner MATLAB Väletablerat Mycket omfattande program GNU OCTAVE Öppen
Läs merITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet
ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,
Läs merAtt skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
Läs merDagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program
Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Läs merTwincat: PLC Control
Dokument Förklaring Dat. Revision KI-221-003-003 Kom igång med trukturerad Text 080402 1.0 Twincat: PLC Control Kom igång med Strukturerad Text (ST) programmering 1. Kod exempel. a. Exemplen som demonstreras
Läs merFöreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är
Läs merAtt förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner
Lektion 4, del 1, kapitel 10 Funktioner i JavaScript Inlärningsmål Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Introduktion
Läs merCommand line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016
Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar
Läs merObjektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter
Läs merDatorsystem Laboration 2: Minnesmappade bussar
Datorsystem Laboration 2: Minnesmappade bussar Senast uppdaterad: 14 oktober 2012 Version 1.2 Student: Lärare: Underskrift: Underskrift: Datum: Datorsystem Laboration 2 1 Innehåll 1 Inledning 2 1.1 Introduktion..................................
Läs merSpråket Python - Del 1 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR
Läs merÖvningsuppgifter kapitel 8
Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans
Läs merFunktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
Läs mer2. Lära sig beskriva en variabel numeriskt med "proc univariate" 4. Lära sig rita diagram med avseende på en annan variabel
Datorövning 1 Statistikens Grunder 2 Syfte 1. Lära sig göra betingade frekvenstabeller 2. Lära sig beskriva en variabel numeriskt med "proc univariate" 3. Lära sig rita histogram 4. Lära sig rita diagram
Läs merProgrammering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:
Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk
Läs merTentamen i. TDDA 69 Data och programstrukturer
1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDA 69 Data och programstrukturer Torsdag den 14 januari 2009, kl 14-18 Hjälpmedel: Inga. Poänggränser: Maximalt
Läs mer1 Funktioner och procedurell abstraktion
1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår
Läs merTUTORIAL: SAMLING & KONSOLL
TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även
Läs merProgrammeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner
Programmeringsteknik och Matlab Övning 3 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Läs merProgrammering för språkteknologer I, VT2012. Rum
Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska
Läs merFrekvenstabell över tärningskast med C#
Instruktion Frekvenstabell över tärningskast med C# Introduktionsuppgift Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Innehåll Du ska följa steg för steg -instruktionen i
Läs mer732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel
732G11 Linköpings universitet 2011-02-15 1 2 3 4 Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar. i Java En funktion i Java... public
Läs merPascal... Pascal. Pascal... Pascal...
... Programspråk uppkallat efter Blaise. Skapat av Nicolaus Wirt. Avsett för undervisning för att lära ut typbegreppet och styrstrukturer. Har fått stor spridning p.g.a. enkelhet och att kompilatorn varken
Läs merPascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt
Programspråk uppkallat efter Blaise. Skapat av Nicolaus Wirt. Avsett för undervisning för att lära ut typbegreppet och styrstrukturer. Har fått stor spridning p.g.a. enkelhet och att kompilatorn varken
Läs merUppgift 1 (grundläggande konstruktioner)
Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en
Läs merAlla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php
Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är
Läs merFöreläsning 3-4 Innehåll
Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå
Läs merPlanering Programmering grundkurs HI1024 HT 2015 - data
Planering Programmering grundkurs HI1024 HT 2015 - data Föreläsning V36 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning
Läs merPlatser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat
Cheat sheets Nedan finns referensblad för fyra olika programmeringsspråk, som kan bli aktuella att använda i matematikundervisning. MATLAB är en välkänd programvara för att göra matematiska beräkningar,
Läs mer732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner
732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (
Läs merPython. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
Läs merHI1024 Programmering, grundkurs TEN
HI1024 Programmering, grundkurs TEN2 2014-10-27 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King
Läs merEDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.
EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade
Läs merDesign av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.
Använd olika lager. Döp lagren! Organisera era bibliotek! Design av interaktiv multimedia Ge era symboler instansnamn för att hitta dem med AS. Nytt för denna kurs: Ingen ActionScript-kod i.fla-filen!
Läs merPython. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
Läs merObjektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java
Läs merI Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program
Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java
Läs merProgrammering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Läs merAtt använda pekare i. C-kod
Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare
Läs merLaboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Läs merOmgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.
Omgivningar Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem. (define (sqrroot c) (define (fixpoint guess c eps) (define
Läs merStatistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs
Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs TE/RC Datorövning 4 Syfte: 1. Lära sig beräkna konfidensintervall och täckningsgrad 2. Lära sig rita en exponentialfördelning 3. Lära sig illustrera
Läs merIntroduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion
Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)
Läs merDagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning
1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch
Läs merLaboration: Whitebox- och blackboxtesting
Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska
Läs merLaboration 1. "kompilera"-ikonen "exekvera"-ikonen
Programmerade system I1 Syfte Laboration 1. Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva
Läs merFöreläsning 2 Programmeringsteknik och C DD1316
Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer
Läs merFöreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program
Läs merLabora&on 2 Funk&oner, if och loop övningar/uppgi:er
Labora&on 2 Funk&oner, if och loop övningar/uppgi:er 1M322 Webbteknik 2, 7,5hp Medieteknik 2017 Rune Körnefors rune.kornefors@lnu.se 1. Ladda ner arbetsdokument Till övningarna i denna labora&on finns
Läs merAnteckningar 1: Grundläggande saker
UPPSALA UNIVERSITET Institutionen för lingvistik och filologi Mats Dahllöf http://stp.ling.uu.se/ matsd/uv/uv11/pst1/ Programmering för språkteknologer I Anteckningar 1: Grundläggande saker 1 Programmering
Läs mer732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning
Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Läs merLÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Läs merStatistik över heltal
Övningsuppgift Statistik över heltal Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande
Läs merVisual Basic, en snabbgenomgång
Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika
Läs merTentamen i. TDDC67 Funktionell programmering och Lisp
1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering
Läs merTENTAMEN OOP
TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
Läs mer(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java
(Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart
Läs merFöreläsning 3: Typomvandling, villkor och val, samt textsträngar
Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Camilla Kirkegaard camilla.kirkegaard@liu.se Linköpings universitet Sweden October 14, 2013 1 Innehåll n n n n n Repetition Typomvandlingar
Läs mer