Vad gör européer på dagarna? Anders Kraftling SAS-ansvarig Statistiska Centralbyrån
Agenda Hur man med SAS kan ta reda på vad européerna gör! Vad gör européer på dagarna? Ett uppdrag från Eurostat Bakgrund till undersökningen En SAS/IntrNet applikation Hur den används Hur den fungerar Hur vi byggde den 2
Sekundär agenda Generella SAS-tips Tabelldriven programmering Genererad programkod från data Namnstandard Hur man undkommer fnutt-helvetet Goda råd i allmänhet vid utveckling av webbapplikationer med SAS 3
HETUS Harmonised European Time Use Survey Många nationer gör tidsanvändningsundersökningar Används inom bland annat genusforskning Harmoniseringen initierades i början på 1990-talet Många länder vill nu sammanställa data och jämföra En webbapplikation ett naturligt val men hur? Möjligheten till dynamiska tabelluttag inte public Login över https 4
HETUS Ett uppdrag från Eurostat Uppdraget att sammanställa data gick till Finland bygga uttagsapplikationen gick till Sverige Deltagande länder i denna fas: Spanien, Frankrike, England, Tyskland, Norge, Sverige, Finland I fas 2 tillkommer ytterligare cirka 10 länder 5
Webb-applikationen 3 skikt Klienten Gränssnittsfunktionalitet Webbserver Webbfunktionalitet Applikationsserver Programfunktionalitet Skikt 1 Skikt 2 Skikt 3 6
HETUS Klienten Demo 7
Klienten https:/www.h.scb.se/hetus Applikations -server SQLserver Webbservern SASapplikation SAS 8
Skikt 1 - Klienten TIPS: Applikationens framsida Utseende Style Templates tus.css Funktionalitet ute i klientens browser Logik Javascript tus.js Data JavascriptArrayer dat.js Fasta sidor page.html Hämtas från Webb-servern Dynamiska sidor page.htm Hämtas eller genereras från SAS-servern 9
Skikt 2 - Webbservern Applikationens mellanskikt Lagrar alla fasta HTML-sidor Lagrar alla resursfiler Bilder, JavaScript, Cascading Style Sheets Har CGI-funktionalitet installerad Broker.exe Broker.cfg Förmedlar begäran till SAS-servern 10
TIPS: för broker.cfg SocketService Tus "Harmonised European Time Used Survey" ServiceAdmin "The administrator" ServiceAdminMail "hetus@scb.se" ServiceDescription "Harmonised European Time Used Surv Server scb6849.scb.intra Port 6003 ServiceSASPoweredLogo "../tus/images/hetussas.gif" ServiceSASPoweredHref "../tus/default.htm" ServiceSASPoweredAlt "Click to get to the Main Menu" ServiceAppendFile "//scb6849/inetpub/tus/copyright.ht ServiceSet SystemPath "<enhet:\\sökväg>" FullDuplex True ServiceAppendFile: Infogas sist i varje HTML-output vid varje request ServiceSet: Tilldelar en makrovariabel som är tillgänglig i hela applikationen 11
Skikt 3 Applikationsservern En tjänst (service) är startad Definierad på en port (socket) Lyssnar efter begäran Startar en SAS-session Stänger den efter timeout (default=15 min) Tjänsten konfigurerad med Datakatalog(er) Programkatalog(er) Vanliga SAS-program 12
TIPS: för proc appserv proc appsrv... unsafe='&";%''' allocate library tmplib '<enhet:sökväg>'; allocate file logfile '<enhet:sökväg\logs\%a_%p.log> allocate library t_dat '<enhet:sökväg>' access=readon allocate file t_pgm '<enhet:sökväg>'; proglibs t_pgm; datalibs t_dat; Exekvera dessa rader för varje request /* Run for each request */ request init=t_pgm.parameters.sas; run; /* Run for each session */ session init=t_pgm.init.sas; 13
Förutsättningar för att enkelt kunna bygga en Webb-applikation 1000-tals manår av färdigskriven kod att parametersätta och köra SAS tillhandahåller en funktion att installeras på Webb-servern för att förmedla anrop till en SAS-server Resultatet kan i realtid destineras direkt till klienten _webout formas med egna Styles och egna Tagsets genom att parsas 14
HETUS-applikationens struktur Datakatalog Formatkatalog Katalog med Webbsidor SAS-makron SAS-program System-katalog http://localhost/scripts91/broker.exe?_service=tus& _sessionid=uvbuwecvj52&_program=t_pgm.getpage.sas&page=meantable.htm Möjligheter i applikationen (1) 15
Gruppera (och summera tid) för: Huvudaktiviteteter Skapa Filtrera egna med episoder villkor Biaktiviteteter Kombinera WHERE-statement episod-egenskaper Lokaler eller förflyttningar I sällskap med 16
Möjligheter i applikationen (1) Välja episod-egenskaper (summerad tid) Huvudaktivitet Biaktivitet Lokal eller förflyttning I sällskap med En episod Välja redovisningsvariabler i tre nivåer Välja redovisning Summerad tid per dag eller vecka Deltagarandel i procent 17
Möjligheter i applikationen (2) Gruppera (och summera tid) för respektive: Huvudaktiviteteter Biaktiviteteter Lokaler eller förflyttningar I sällskap med 18
SAS-tips: dynamisk kod [1] /*==================================================== Check to see if there is groupdefinitiones in the call = Create syntax. Sum time (user definied collapsed groups) ====================================================*/ data _null_;... p1 = index(intext,"#"); if p1 > 0 then Konstruera do; SAS-syntax och lägg i en SAS-makrovariabel... outsyntax=catt(outcomp," ",outlabel); call symput("syntax",%nrstr(trim(outsyntax))); end; else do; call symput("syntax",""); end; run; 19
SAS-tips: dynamisk kod [2] /*==================================================== Create a dataset with the INVW (the inverted weight) ====================================================*/ data episod/view=episod; set &dsn /* If user selected countries => Subset countries here %if &country_list ne %str() %then (where=(cid in(&country_list)));; /*================================================== Sum to groups eventually if there is code for it ==================================================*/ &syntax Sätt in Makrovariabeln i sin context => Innehåller den syntax så exekveras den, annars händer ingenting 20
Möjligheter i applikationen (3) Skapa egna episoder Kombinera episod-egenskaper Filtrera med villkor WHERE-statement 21
TIPS: för JavaScript // ================================================= // gotowhere. Open the WHERE-screen // ================================================= function gotowhere() { var winpop = window.open("../tus/where.html", "winwhere","location,height=450,width=600") } // ================================================= // putwhere. Close the WHERE-screen // ================================================= För värdet från ett Browser-fönster till ett annat fönster function putwhere() { var txtwhere = document.frmwhere.txtwhere.value var txtwheretitle = document.frmwhere.txtwheretitle.va window.opener.document.forms[0].where.value = txtwhere window.opener.document.forms[0].seltxt.value = txtwheretitle window.close() window.opener.focus() } 22
Möjligheter i applikationen (3) Välja ett av flera beskrivna format Format är typiskt genomgående (multilabel notsorted) Ger möjlighet att enkelt framställa Summor med vald plats i tabellen Därav rader Osäkerhetsgranskning görs för celler med litet antal i urval för medelvärdestabeller Prickmarkeras (..) Insikter funna 23
SAS-tips: format (multilabel notsorted) /*============================================= Skapa multilabelformat =============================================*/ proc format; value $kon (multilabel notsorted) '1' = 'Män' '2' = 'Kvinnor' '1'-'2' = 'Båda könen' ; value alder (multilabel notsorted) 16-19 = '16-19 år' 20-24 = '20-24 år' 25-44 = '25-44 år' 45-64 = '45-64 år' 65-high = '65 år-' 16-high = 'Summa' 20-64 = '20-64 år' ; run; 24
SAS-tips: format (multilabel notsorted) /*============================================= Ta fram tabellen som ett SAS-dataset =============================================*/ proc tabulate data=sam101a_dat order=data; class Kon Alder SyssStat/missing mlf preloadfmt; by Fors00 Region notsorted; format Alder alder. Kon $kon. SyssStat $syssstat.; table Alder=' ', Kon=' ' * SyssStat=' '*N=' '*f=nlnum7.0 /printmiss misstext='-' box='åldersklasser'; run; 25
Insikter funna Tekniken medger att gamla SAS-program kan få en renässans Ett 15 år gammalt SAS-makro har satts i arbete igen Proc tabulate SAS/ODS ger (nästan) outtömliga möjligheter till att hantera dokumenttyper och utseende Eget Tagset Egen Style TUStag TUSstyle 26
Lärdomar dragna [1] Sträva efter att hitta en transparens Samtliga variabler klädda med lablar och format Intelligent konstruerad standard för variabelnamn och associerade format Medger autogenerering av JavaCode Naturlig association mellan variabler och format Ordning och reda i katalogstrukturen Många instanser av kataloger att hålla koll på Webbservern SAS Applikationsservern 27
Lärdomar dragna [2] Undvik data _null_ och PUT-satser: data _null_; file _webout; put <html> ; put <body> ; run; Undvik även i möjligaste mån ods markup text=: data _null_; ods markup text='<br><form action="*">'; ods markup text='<input type=button value="new table" style="width:100 onclick="javascript:window.history.go(-1)">'; ods markup text='</form>'; run; 28
Lärdomar dragna [3] Arbetsgång 1. Sätt upp och starta SAS/IntrNet tjänsten 2. Skriv eller anpassa SAS-programmen 3. Sätt upp en ODS-template för att få outputen exakt som du vill ha den 4. Skriv in en URL i adressfältet mot tjänsten 5. Använda HTML-outputen som stomme till ett gränssnitt för applikationen 29
Tack för mig! 30
31