am Beispiel einer Simulation

Ähnliche Dokumente
Einführung in effizientes Programmieren mit PROC IML am Beispiel einer Simulation

WiMa-Praktikum 1. Woche 8

2. Einführung in das Ingenieurtool MATLAB

Mathematische Computer-Software

10:Exkurs MATLAB / Octave

This image cannot currently be displayed. Java à Matlab. bereitgestellt von Dr. Lukas Faessler 12/4/17

Tücken bei der Erstellung von Zufallszahlen mit RANUNI

Programmiervorkurs für die Numerik Teil 2/4

MATLAB Sommersemester 2018 Dr. Ulf Mäder

2. Programmierung in C

Effizientes Bootstrapping mit SAS

Einführung in. Pierre Bayerl

Logistische Regression in SAS

MATRIZEN. Eine Matrix ist eine rechteckige Anordnung von Zahlen, als ein Schema betrachtet. a 11 a a 1n a 21. a a 2n A = a m1 a m2...

Algorithmen und Datenstrukturen II

Merge mit nicht eindeutigen by-variablen

Makrofunktion zur Übernahme von Abfragekriterien aus externen Quellen, z.b. einer Excel Datei, in SAS Code (PROC SQL)

Einführung in das rechnergestützte Arbeiten

Kurze Einführung in Octave

Simulationen und Mathematische Programmierung mit SAS

1 Autorennen ( = 11 Punkte)

SIMULATIONEN UND MATHEMATISCHE PROGRAMMIERUNG MIT SAS

Hallo Jessi, wenn ich das. DATA aufg3_b; vari='<.0001'; IF &wil_two_test. le vari THEN pwert=0.0001;

Programmieren I. Kapitel 5. Kontrollfluss

Brückenkurs Programmieren

Arrays. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik

Inhaltsverzeichnis. Angelika Bosl. Einführung in MATLAB/Simulink. Berechnung, Programmierung, Simulation. ISBN (Buch):

Stichworte zu Octave

Dateneingabe und Transformation Übersicht

Kapitel 6: Matrixrechnung (Kurzeinführung in die Lineare Algebra)

Matrizen. Jörn Loviscach. Versionsstand: 14. April 2009, 00:25

Multiplikation von Matrizen

Ein kleiner Matlab Primer Frank Schimmel

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48

Numerik-Programm, mittlerweile mit vielen Erweiterungen (Toolboxen) Matlab = Matrix Laboratory Sehr gute Doku (doc, help, lookfor)

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/45

Matrizen. Jörn Loviscach. Versionsstand: 12. April 2010, 19:00 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung.

R-Wörterbuch Ein Anfang... ein Klick auf einen Begriff führt, sofern vorhanden, zu dessen Erklärung.

Schriftlicher Test zu C++ (90 Minuten) VU Einführung ins Programmieren für TM. 22. Juni 2012

Matrizen. Jörn Loviscach

Einführung in MATLAB. Grundlagen für die Übungen begleitend zur Vorlesung Neuroinformatik I

Grundbegriffe der Informatik

Lektion 3. 1 Theorie. NTS1-P Natur, Technik und Systeme 1 Praktikum Herbstsemester 2012

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

Zugriff auf Matrizen. Anhängen von Elementen. Punktweise Operatoren. Vektoren und Matrizen in MATLAB II

Matrizen. a12 a1. a11. a1n a 21. a 2 j. a 22. a 2n. A = (a i j ) (m, n) = i te Zeile. a i 1. a i 2. a i n. a i j. a m1 a m 2 a m j a m n] j te Spalte

Dr. Michael Lehn WS 2013/2014 Iris Häcker Klaus Stolle Institut für Numerische Mathematik Universität Ulm

Robuste und effiziente Konfidenzbereiche für nichtzentrale Perzentile

Algorithmen und Datenstrukturen 2

Einführung in die Programmierung (MA8003)

Einführung in die Programmierung (MA8003)

FUNKTIONEN UND FORMELN IN

Programmieren mit statistischer Software

FORMELN IN. Referent: Daniel Laskow Betreuer: Eugen Betke Programmierung in R Arbeitsbereich Wissenschaftliches Rechnen Universität Hamburg

Vektorräume und Rang einer Matrix

Sprachkonstrukte Verzweigungen und Array-Strukturen

3 Kurzeinführung in Matlab

Simulationen mit SAS und R ein Vergleich

Einführung in Matlab. Eike Meerbach 6. Mai Typeset by FoilTEX

1 Konsole öffnen. 2 matlab & und return eingeben. 3 Konsole dauerhaft geöffnet lassen. 1 Menüpunkt File - Exit MATLAB oder. 2 quit (und return) oder

NICHT TRIVIAL: MAKROVARIABLEN - GLOBAL ODER LOKAL

Informatik I (D-MAVT)

Dateien trennen und zusammenfügen

Übungspaket 23 Mehrdimensionale Arrays

C A R L V O N O S S I E T Z K Y. Transformationen. Johannes Diemke. Übung im Modul OpenGL mit Java Wintersemester 2010/2011

Übungspaket 23 Mehrdimensionale Arrays

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Möglichkeiten der SAS Software für die Analyse großer Datentabellen

In den USA verwendet man statt dessen eckige Klammern, was sich in der Software niederschlägt (mit Ausnahmen wie Wolfram Alpha):

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors

Strukturen & Math. Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen

Nützliches Hilfsmittel (um Schreiberei zu reduzieren): 'Erweiterte Matrix': Gauß- Verfahren

In den USA verwendet man statt dessen eckige Klammern, was sich in der Software niederschlägt (mit Ausnahmen wie Wolfram Alpha):

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

MATLAB - Grundlagen und Anwendungen (Teil I) Mentoring WiSe 2018/19. Maren Fanke, Alexandra Wesolek, Alexander Korzec Freie Universität Berlin

Vektoren. 2.1 Darstellung. Kapitel Subtraktion und Addition

Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut

Klaus Schliep. 16. Februar 2004

Programmierung für Mathematik HS12 Übung 3

Wortähnlichkeit: Praktische Implementierung

Praktikum zur Vorlesung: Numerische Mathematik für Lehramt SS Matlab: Fortsetzung. Jan Mayer. 4. Mai 2006

Skript zur Vorlesung. Informatik 1. Studienjahr Halbjahr

Eine kurze Einführung in scilab

Java Referenzdatentypen genauer betrachtet

Grundlegende Datentypen

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 23. Januar 2017

Nützliches Hilfsmittel (um Schreiberei zu reduzieren): 'Erweiterte Matrix': Gauß- Verfahren

Lineare Gleichungssysteme und Matrizen

Ein SAS-Makro zur Erzeugung multivariat normalverteilter Zufallsgrößen

Zugriff auf eine externe Dynamic Link Library zur Berechnung von Personenjahren und Standardisierten Mortalitäts Ratios mit SAS

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Transkript:

Einführung in effizientes Programmieren mit PROC IML am Beispiel einer Simulation Biljana Gigic 1, Andreas Deckert 2 1 Deutsches Krebsforschungszentrum / Nationales Centrum für Tumorerkrankungen (Heidelberg) 2 Institute of Public Health / Institut für Medizinische Biometrie und Informatik (Heidelberg) 15. Konferenz der SAS Anwender in Forschung und Entwicklung (KSFE) "Voneinander lernen" an der Ruprecht Karls Universität Heidelberg

Überblick SAS IML Software Einführung in SAS IML Programmierung Syntax Einführungsbeispiel Spezifizierung einer Matrix Generierung einer Matrix Modifizierung einer Matrix Operatoren in SAS IML Simulation ToxCrit Hintergrund und Fragestellung Ein und Ausgabeparameter Effektivität der IML Programmierung Fazit und Diskussion

SAS IML Software Interactive Matrix Language Eigenständige Programmiersprache innerhalb von SAS Matrizenorientiert Interaktion mit SAS Datensätzen Hohe Performance Geeignet für Matrizenoperationen Programmierung statistischer Verfahren, die nicht in SAS implementiert sind aufwendige Simulationen

Syntax Aufruf von SAS IML: proc iml;...; < IML-Statements >...; quit; Mit quit wird die Session beendet.

Einführungsbeispiele Spezifizierung einer Matrix proc iml; reset print; a = {1 2 3 4}; /*Zeilenvektor der Dimension 1 x 4*/ b = {1,2,3,4}; /*Spaltenvektor der Dimension 4 x 1*/ c = {1 2 3 4,5 6 7 8}; /*Zweidimensionale Matrix der Dimension 2 x 4*/ d = 10; /*Skalar der Dimension 1 x 1*/

Einführungsbeispiele Spezifizierung einer Matrix proc iml; reset print; a = {1 2 3 4}; /*Zeilenvektor der Dimension 1 x 4*/ b = {1,2,3,4}; /*Spaltenvektor der Dimension 4 x 1*/ c = {1 2 3 4,5 6 7 8}; /*Zweidimensionale Matrix der Dimension 2 x 4*/ d = 10; /*Skalar der Dimension 1 x 1*/ Output:

Einführungsbeispiele Spezifizierung einer Matrix proc iml; reset print; a = {1 2 3 4}; /*Zeilenvektor der Dimension 1 x 4*/ b = {1,2,3,4}; /*Spaltenvektor der Dimension 4 x 1*/ c = {1 2 3 4,5 6 7 8}; /*Zweidimensionale Matrix der Dimension 2 x 4*/ d = 10; /*Skalar der Dimension 1 x 1*/ Output:

Einführungsbeispiele Spezifizierung einer Matrix proc iml; reset print; a = {1 2 3 4}; /*Zeilenvektor der Dimension 1 x 4*/ b = {1,2,3,4}; /*Spaltenvektor der Dimension 4 x 1*/ c = {1 2 3 4,5 6 7 8}; /*Zweidimensionale Matrix der Dimension 2 x 4*/ d = 10; /*Skalar der Dimension 1 x 1*/ Output:

Einführungsbeispiele Spezifizierung einer Matrix proc iml; reset print; a = {1 2 3 4}; /*Zeilenvektor der Dimension 1 x 4*/ b = {1,2,3,4}; /*Spaltenvektor der Dimension 4 x 1*/ c = {1 2 3 4,5 6 7 8}; /*Zweidimensionale Matrix der Dimension 2 x 4*/ d = 10; /*Skalar der Dimension 1 x 1*/ Output:

Einführungsbeispiele Generierung einer Matrix

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements:

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente:

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3); Vielfaches einer Matrix:

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3); Vielfaches einer Matrix: f = repeat(e,2,1);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3); Vielfaches einer Matrix: f = repeat(e,2,1);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3); Vielfaches einer Matrix: f = repeat(e,2,1); Indexvektor:

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3); Vielfaches einer Matrix: f = repeat(e,2,1); Indexvektor: g = do(-8,2,2);

Einführungsbeispiele Generierung einer Matrix Vielfaches eines Ausgangselements: d = j(2,3,0); Wiederholtes Eintragen verschiedener Elemente: e = shape({1 2 3 4},2,3); Vielfaches einer Matrix: f = repeat(e,2,1); Indexvektor: g = do(-8,2,2);

Einführungsbeispiele Modifizierung einer Matrix

Einführungsbeispiele Modifizierung einer Matrix

Einführungsbeispiele Modifizierung einer Matrix Die ersten drei Elemente der zweiten Zeile um 3 erhöhen:

Einführungsbeispiele Modifizierung einer Matrix Die ersten drei Elemente der zweiten Zeile um 3 erhöhen: do i = 1 to 3; c[2,i] = c[2,i]+3;

Einführungsbeispiele Modifizierung einer Matrix Die ersten drei Elemente der zweiten Zeile um 3 erhöhen: do i = 1 to 3; c[2,i] = c[2,i]+3;

Einführungsbeispiele Modifizierung einer Matrix Die ersten drei Elemente der zweiten Zeile um 3 erhöhen: do i = 1 to 3; c[2,i] = c[2,i]+3; Alle Elemente der zweiten Zeile um 3 erhöhen:

Einführungsbeispiele Modifizierung einer Matrix Die ersten drei Elemente der zweiten Zeile um 3 erhöhen: do i = 1 to 3; c[2,i] = c[2,i]+3; Alle Elemente der zweiten Zeile um 3 erhöhen: c[2,] = c[2,]+3;

Einführungsbeispiele Modifizierung einer Matrix Die ersten drei Elemente der zweiten Zeile um 3 erhöhen: do i = 1 to 3; c[2,i] = c[2,i]+3; Alle Elemente der zweiten Zeile um 3 erhöhen: c[2,] = c[2,]+3;

Einführungsbeispiele Syntax einer Funktion innerhalb PROC IML proc iml; start Indexvektor(Startwert, Endwert, Inkrement); Vektor = do(startwert, Endwert, Inkrement); return(vektor); finish Indexvektor; reset print; Ausgabe = Indexvektor(-8,2,2); Output:

Operatoren in SAS IML Transponieren einer Matrix ' Matrixmultiplikation * Potenzierung quadratischer Matrizen ** Elementweise Multiplikation # Elementweise Potenzierung ## Elementweise Division / Horizontale Konkatination Vertikale Konkatination // Arithmetisches Mittel :

Simulation ToxCrit 1 Hintergrund und Fragestellung Toxische Reaktionen von Patienten auf Therapie in frühen Phasen onkologischer Studien Primärer Endpunkt früher klinischer Phasen: Toxizität Sicherheit Wirksamkeit Studienabbruch oder Dosisreduktion aufgrund von Toxizität Schätzung des Studienabbruchrisikos Monte Carlo Simulation Entscheidungsgrundlage für Studiendurchführung und ethische Gesichtspunkte Darstellung des Abbruchrisikos 1 H. Aamot et al.: Continuous monitoring of toxicity in clinical trials simulating the risk of stopping prematurely ; Int J Clin Pharmacol Ther, 48(7):476 7, Jul. 2010

Simulation ToxCrit Ein und Ausgabeparameter

Simulation ToxCrit Ein und Ausgabeparameter Eingabeparameter für die Simulation npat Anzahl Studienteilnehmer ptoxcrit kritische Toxizitätsrate pabbruch Wahrscheinlichkeitsgrenze für inakzeptable Toxizität ptox angenommene Wahrscheinlichkeit für Toxizität bei einem Patienten nsim Anzahl der Simulationsläufe seed Zufallsanker für die Reproduzierbarkeit der Simulation

Simulation ToxCrit Ein und Ausgabeparameter Eingabeparameter für die Simulation npat Anzahl Studienteilnehmer ptoxcrit kritische Toxizitätsrate pabbruch Wahrscheinlichkeitsgrenze für inakzeptable Toxizität ptox angenommene Wahrscheinlichkeit für Toxizität bei einem Patienten nsim Anzahl der Simulationsläufe seed Zufallsanker für die Reproduzierbarkeit der Simulation Ausgabe Anzahl Toxizitätsfälle, bei denen die Studie abgebrochen wird Abbruchrisiko der Studie

Simulation ToxCrit Anzahl Toxizitäten Studienabbruch %macro toxcrit(npat=,ptoxcrit=,pabbruch=,nsim=,ptox=,seed=); proc iml; start Pat_Array(npat,pabbruch,ptoxcrit); crit = j(npat,1,npat+1); do u = 1 to npat; do l = 0 to u; wk = betainv((1-pabbruch),1+l,1+u-l); if (wk>ptoxcrit) then do; crit[u,1] = l; goto exit; exit: return (crit); finish Pat_Array;

Simulation ToxCrit Anzahl Toxizitäten Studienabbruch %macro toxcrit(npat=,ptoxcrit=,pabbruch=,nsim=,ptox=,seed=); proc iml; start Pat_Array(npat,pabbruch,ptoxcrit); Funktionsaufruf crit = j(npat,1,npat+1); do u = 1 to npat; do l = 0 to u; wk = betainv((1-pabbruch),1+l,1+u-l); if (wk>ptoxcrit) then do; crit[u,1] = l; goto exit; exit: return (crit); finish Pat_Array; Funktionsende

Simulation ToxCrit Anzahl Toxizitäten Studienabbruch %macro toxcrit(npat=,ptoxcrit=,pabbruch=,nsim=,ptox=,seed=); proc iml; start Pat_Array(npat,pabbruch,ptoxcrit); crit = j(npat,1,npat+1); do u = 1 to npat; do l = 0 to u; wk = betainv((1-pabbruch),1+l,1+u-l); Initialisierung des Vektors crit if (wk>ptoxcrit) then do; crit[u,1] = l; goto exit; exit: return (crit); finish Pat_Array;

Simulation ToxCrit Anzahl Toxizitäten Studienabbruch %macro toxcrit(npat=,ptoxcrit=,pabbruch=,nsim=,ptox=,seed=); proc iml; start Pat_Array(npat,pabbruch,ptoxcrit); crit = j(npat,1,npat+1); do u = 1 to npat; do l = 0 to u; wk = betainv((1-pabbruch),1+l,1+u-l); if (wk>ptoxcrit) then do; crit[u,1] = l; goto exit; exit: return (crit); finish Pat_Array; Wie im macro, jedoch nicht im Data Step

Simulation ToxCrit Anzahl Toxizitäten Studienabbruch %macro toxcrit(npat=,ptoxcrit=,pabbruch=,nsim=,ptox=,seed=); proc iml; start Pat_Array(npat,pabbruch,ptoxcrit); crit = j(npat,1,npat+1); do u = 1 to npat; do l = 0 to u; wk = betainv((1-pabbruch),1+l,1+u-l); if (wk>ptoxcrit) then do; crit[u,1] = l; goto exit; exit: return (crit); finish Pat_Array; Rückgabe des Ergebnisses; Vektor wird übergeben

Simulation ToxCrit Anzahl Toxizitäten Studienabbruch %macro toxcrit(npat=,ptoxcrit=,pabbruch=,nsim=,ptox=,seed=); proc iml; start Pat_Array(npat,pabbruch,ptoxcrit); crit = j(npat,1,npat+1); do u = 1 to npat; do l = 0 to u; wk = betainv((1-pabbruch),1+l,1+u-l); if (wk>ptoxcrit) then do; crit[u,1] = l; goto exit; exit: return (crit); finish Pat_Array; Steuerbefehle und Parameter innerhalb einer IML Funktion benötigen kein %

Simulation ToxCrit Anzahl der abgebrochenen Studien start sim(npat,nsim,ptox,crit,seed); call streaminit(seed); stop = j(npat,1,0); do i = 1 to nsim; total = j(npat,1,0); do z = 1 to npat; tox = RAND('BINOMIAL',ptox,1); if (z=1) then total[z,1] = tox; else total[z,1] = total[z-1,1]+tox; if (total[z,1]>=crit[z,1]) then do; stop[z,1] = stop[z,1]+1; goto exit; exit: return (stop); finish sim;

Simulation ToxCrit Anzahl der abgebrochenen Studien start sim(npat,nsim,ptox,crit,seed); call streaminit(seed); stop = j(npat,1,0); do i = 1 to nsim; total = j(npat,1,0); do z = 1 to npat; tox = RAND('BINOMIAL',ptox,1); if (z=1) then total[z,1] = tox; else total[z,1] = total[z-1,1]+tox; if (total[z,1]>=crit[z,1]) then do; stop[z,1] = stop[z,1]+1; goto exit; exit: return (stop); finish sim; Zugriff auf Vor und Nachfolgewerte im Vektor; Im Data Step innerhalb von Do Schleifen mit lag Funktion nicht möglich; Arrays nötig jedoch nicht trivial

Simulation ToxCrit _wkm=j(&npat,1,0); _Pat=j(&npat,1,0); _wkmkum=j(&npat,1,0); Abbruchrisiko einer Studie _crit = Pat_Array(&npat,&pabbruch,&ptoxcrit); _stop = sim(&npat,&nsim,&ptox,_crit,&seed); _wkm = 100*_stop/&nsim; do i = 1 to &npat; _Pat[i,1]=i; do i = 1 to &npat; if i = 1 then do; _wkmkum[i,1] = _wkm[i,1]; else _wkmkum[i,1] = _wkmkum[i-1,1]+_wkm[i,1];

Simulation ToxCrit Abbruchrisiko einer Studie _wkm=j(&npat,1,0); _Pat=j(&npat,1,0); _wkmkum=j(&npat,1,0); _crit = Pat_Array(&npat,&pabbruch,&ptoxcrit); _stop = sim(&npat,&nsim,&ptox,_crit,&seed); Aufruf der Funktion Pat_Array der return Wert (gesamte Vektor) crit wird an _crit übergeben _wkm = 100*_stop/&nsim; do i = 1 to &npat; _Pat[i,1]=i; do i = 1 to &npat; if i = 1 then do; _wkmkum[i,1] = _wkm[i,1]; else _wkmkum[i,1] = _wkmkum[i-1,1]+_wkm[i,1];

Simulation ToxCrit _wkm=j(&npat,1,0); _Pat=j(&npat,1,0); _wkmkum=j(&npat,1,0); Abbruchrisiko einer Studie _crit = Pat_Array(&npat,&pabbruch,&ptoxcrit); _stop = sim(&npat,&nsim,&ptox,_crit,&seed); _wkm = 100*_stop/&nsim; do i = 1 to &npat; _Pat[i,1]=i; do i = 1 to &npat; if i = 1 then do; _wkmkum[i,1] = _wkm[i,1]; else _wkmkum[i,1] = _wkmkum[i-1,1]+_wkm[i,1]; Aufruf der Funktion sim seed wird gesetzt, da hier der Zufallsgenerator implementiert wurde

Simulation ToxCrit _wkm=j(&npat,1,0); _Pat=j(&npat,1,0); _wkmkum=j(&npat,1,0); Abbruchrisiko einer Studie _crit = Pat_Array(&npat,&pabbruch,&ptoxcrit); _stop = sim(&npat,&nsim,&ptox,_crit,&seed); _wkm = 100*_stop/&nsim; do i = 1 to &npat; _Pat[i,1]=i; do i = 1 to &npat; if i = 1 then do; _wkmkum[i,1] = _wkm[i,1]; else _wkmkum[i,1] = _wkmkum[i-1,1]+_wkm[i,1]; Kein %sysevalf für Operation nötig

Simulation ToxCrit Output und Data Set print _Pat _crit _wkmkum; _toxcrit = _Pat _crit _wkmkum; varnames = {PatientNo ToxPatients InterruptionProb}; create toxcrit from _toxcrit [colname=varnames]; append from _toxcrit; close toxcrit; quit; %mend toxcrit;

Simulation ToxCrit Output und Data Set print _Pat _crit _wkmkum; Ausgabe in Output _toxcrit = _Pat _crit _wkmkum; varnames = {PatientNo ToxPatients InterruptionProb}; create toxcrit from _toxcrit [colname=varnames]; append from _toxcrit; close toxcrit; quit; %mend toxcrit;

Simulation ToxCrit Output und Data Set print _Pat _crit _wkmkum; _toxcrit = _Pat _crit _wkmkum; varnames = {PatientNo ToxPatients InterruptionProb}; create toxcrit from _toxcrit [colname=varnames]; append from _toxcrit; close toxcrit; Horizontale Konkatenation quit; %mend toxcrit;

Simulation ToxCrit Output und Data Set print _Pat _crit _wkmkum; _toxcrit = _Pat _crit _wkmkum; varnames = {PatientNo ToxPatients InterruptionProb}; create toxcrit from _toxcrit [colname=varnames]; append from _toxcrit; close toxcrit; Variblennamen quit; %mend toxcrit;

Simulation ToxCrit Output und Data Set print _Pat _crit _wkmkum; _toxcrit = _Pat _crit _wkmkum; varnames = {PatientNo ToxPatients InterruptionProb}; create toxcrit from _toxcrit [colname=varnames]; append from _toxcrit; close toxcrit; Matrix _toxcrit wird in Datensatz geschrieben quit; %mend toxcrit;

Simulation ToxCrit %toxcrit(npat=20,ptoxcrit=0.1,pabbruch=0.95,nsim=1000000,ptox=0.08,seed=123456);

Simulation ToxCrit Simulationszeiten im Vergleich zu R und Java Sim.-Läufe

quit;