<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Derzeit haben wir dort, wo ich arbeite, SAS 9.2 Foundation mit QC-Paket, und wir haben 4 Vorlagen oder Makroprogramme, die mit jedem unserer Produkte ausgeführt werden.Welche wir haben 40+ Produkte.Das Problem ist, dass wir die einzige Niederlassung im Unternehmen sind, die SAS für unsere Berichte verwendet, und es wurde gewünscht, dass sie in JMP erstellt werden.Ein typischer SAS-Marco für das, was wir derzeit haben, ist
%macro Import(Filepath=) die Excel-Datei(en), normalerweise zwei Arbeitsblätter aus einer Arbeitsmappe.Eine für die Daten und eine für Spezifikationsgrenzen
%macro USLtest(test=)
%macro LSLtest(test=)
%macro BothSLtest(test=)
ods rtf startpage=jetzt Spalten= 1 ;
Daten Ergebnisdaten;
Ergebnisdaten setzen;
Tabellenwert= 1 ;
Tabellenwert formatieren 8. ;
Lauf;
/* Zeitleiste */
Datenphasen (keep=lot_count _Lot_ _PHASE_);
Länge _PHASE_ $ 7 ;
Ergebnisdaten setzen;
if mfg_date <= &startdate then _PHASE_= 'Frühere' ;
sonst wenn mfg_date >= &startdate dann _PHASE_= 'Aktuell' ;
Lauf;
Datengrenzen (umbenennen=(Unterstrich=_VAR_));
Grenzen setzenDaten;
wo translate(strip(_VAR_), '____' , ' ()/' )= "&Prüfung" ;
underscore=translate(strip(_VAR_), '____' , ' ()/' );
_VAR_ fallen lassen;
Lauf;
data vref (keep=newvar _REF_ _REFLAB_ _CVREF_ rename=(newvar=_VAR_));
Grenzen setzen;
wo _VAR_= "&Prüfung" ;
newvar=strip(_VAR_);
mache ich= 1 zu 2 ;
wenn ich= 1 dann mach;
_REF_=_LSL_;
_REFLAB_= 'LSL' ;
_CVREF_= 'rot' ;
Ausgang;
Ende;
wenn ich= 2 dann mach;
_REF_=_USL_;
_REFLAB_= 'USL' ;
_CVREF_= 'rot' ;
Ausgang;
Ende;
Ende;
_VAR_ fallen lassen;
Lauf;
/* Laufdiagramm */
proc shewhart data=resultsdata;
irchart &test*lot_count= '*' / nochart nochart2 vref=vref /*outtable=data1*/ Vorgeschichte = Daten1;
Lauf;
Datendaten2;
data1-Phasen zusammenführen;
von lot_count;
_VAR_=Streifen( "&Prüfung" );
Lauf;
Datendiagramme;
Data2-Limits zusammenführen;
von _VAR_;
symput aufrufen ( 'lsl' ,Streifen(_LSL_));
symput aufrufen ( 'usl' ,Streifen(_USL_));
symput aufrufen ( 'var' ,Streifen(_VAR_));
symput aufrufen ( 'Einheiten' ,Streifen(Einheiten));
Lauf;
/* Individuelle Maßtabelle */
proc shewhart history=data2;
irchart &test*lot_count= '*' /outlabel=(lot_count) /* Bereichsdiagramm entfernen */ nochart2 vref=vref /* Fähigkeitsindex basierend auf Teilgruppendaten */ cindizes /* Spezifikationsgrenzen */ lsl=&lslusl=&usl
/* Liest Zeitleisten */ readphases=all /* Identifiziert Phasen oben im Diagramm */ phaselegend vreflabpos= 2 zerostd test= 1 zu 4 testlabel1= ' ' testlabel2= ' ' clipfactor= 2 totpanels= 1 ;
einfügen stddev cpklcl= 'Cpk um 95 % niedriger' cpk= 'Cpk' cpkucl= 'Cpk 95 % oben' ;
Bezeichnung &var= "&var (&Einheiten)" ;
Lauf;
/* Histogramm */
Ods-Auswahlhistogramm;
proc-Fähigkeit data=charts noprint;
spec lsl=&lsl usl=&usl;
var &var;
Histogramm &var / normal;
Einschub n= 'N'
pctlss= '% < LSL' pctgtr= '% > USL' cpklcl= 'Ppk 95 % niedriger' cpk= 'Pk' cpkucl= 'Ppk 95% Obermaterial' /
cfill = ywh
formatieren = 6.2 ;
Bezeichnung &var= "&var (&Einheiten)" ;
Lauf;
Daten Ergebnisdaten;
Ergebnisdaten setzen;
Tabellenwert= 3 ;
Tabellenwert formatieren 8. ;
Lauf;
ods rtf-Spalten= 4 ;
proc report data=resultsdata nowindows;
Spalte lot_count _lot_ &test;
lot_count definieren / 'Zählen' Anzeigestil (Spalte) = [Zellbreite = .5 in];
definiere _lot_ / display;
definiere mfg_date / display;
definieren &testen / anzeigen;
Lauf;
%macro USLtestwithsubgroups(test=)
%macro LSLtestwithsubgroups(test=)
%macro BothSLtestwithsubgroups(test=)
ect..
%macro Outputfilemacro(filepath=) innerhalb dieses Makros wird durch eine allgemeine Reihenfolge zusammengefasst (ODS-Grafik an, ods rtf-Startseite, Aufruf der Testmakros wie %BothSLtest(test='pH'), ods-Grafik aus, rtf schließen)
Ich rufe zwischen 8 und 20 verschiedene Testmakros innerhalb des Ausgabedateimakros auf, wobei jedes 2 bis 4 Diagramme pro Test anzeigt, je nachdem, welches Testmakro verwendet wird.
Am Ende meines Programms habe ich nur eine Handvoll Dinge zu ändern.
%Import(Dateipfad=Speicherort)
%Outputfilemacro(filepath=Dateipfad, Produktinformationen für Titel und dergleichen)
Ein Beispiel für Makros, die ich im Ausgabedateimakro ausführe, wäre:
%mend Ausgabedateimakro
ods-Grafikoptionen mit outfilepath-Ziel
% BeideSLChart (Startdatum= '01. April 2013' , Test=pH)
% BothSLMeansChart (Startdatum= '01. April 2013' , test=Extractable_Volume, firstvar=C1, lastvar=C5, samplesize= 5 , startlotcount= 42 )
% USLCart (Startdatum= '01. April 2013' , test=Water_Content)
% BeideSLChart (Startdatum= '01. April 2013' , test=Gehalt__Alprostadil_)
% USLCart (Startdatum= '01. April 2013' , test=PGA1)
% USLCart (Startdatum= '01. April 2013' , test=PGB1)
% USLCart (Startdatum= '01. April 2013' , test=keto_PGE1)
% USLCart (Startdatum= '01. April 2013' , test=iso_PGE1)
% USLCart (Startdatum= '01. April 2013' , test=Gesamt_Verunreinigungen)
% BothSLMeansChart (Startdatum= '01. April 2013' , test=Content_Uniformity, firstvar=CU1, lastvar=CU10, samplesize= 10 , startlotcount= 42 )
% USLCart (Startdatum= '01. April 2013' , test=AV)
% BeideSLChart (Startdatum= '01. April 2013' , test=Gehalt__NaCl_)
ods Schlussworte
%mend Ausgabedateimakro
%Ausgabedateimakro ( Dateipfad= 2014 \ 2014 _Produktname\SAS\ Code , Produktnummer= Code , Produktname=Name , Startdatum= '12. Juni 2013' , Enddatum= '11. Juni 2014'd)
Markieren Sie dieses Makro, klicken Sie auf Senden, SAS erledigt den Rest.
Test ist der Variablenname aus meinem Datensatz, der getestet und anhand von Spezifikationsgrenzen dargestellt wird.Ich habe Kontrollkarten mit Fähigkeitsschätzungen, die gegen die Spezifikationsgrenzen getestet wurden.
Die Diagramme zeigen spezifische Grenzwerte für jeden Test, aktuelle und frühere Zeitphasen, abhängig von den von mir ausgewählten Daten, und Fähigkeitsindizes in der oberen linken Ecke der Diagramme.Jedes Mal, wenn ich dies für ein anderes Produkt ausführe, ändere ich lediglich den Dateipfadnamen, kopiere und füge die Testmakros ein, die ich ausführen möchte, und setze den Wert test= in jedem der SLCchart-Makros, die ich haben möchte.Ich kann alle Diagramme, die ich benötige, für jedes Produkt und jede Produktstärke, die ich habe, in etwa 5-10 Minuten ausgeben.Dieses spezielle Programm für eine Stärke eines Produkts erstellt etwa 26 Diagramme mit Datenausdrucken, die für den Test nach dem Diagramm spezifisch sind.
Die Frage ist, kann ich etwas Ähnliches in JMP 10 tun?Wenn ja, wie funktionieren Makros in JMP?
Ich habe ein geringes Verständnis von JMP JSL, bin aber ganz neu darin.Ich versuche nur herauszufinden, wie man Dinge in JMP so automatisieren kann, wie sie in unseren SAS-Makros sind.
Nachricht wurde bearbeitet von: Jeff Ollis
lustig,
Ich bin mir nicht ganz sicher, wie Ihre Ausgabe aussehen könnte, aber die JSL zum Öffnen einer Datei und zum Erstellen einiger Regelkarten ist ziemlich einfach.Verwenden Sie JMP, um Ihre Excel-Datei zu öffnen, und die JMP-Tabelle enthält ein "Quellen"-Skript im Tabellenfeld, mit dem Sie die Tabelle erneut öffnen können. Verwenden Sie dann JMP, um die Regelkarten zu erstellen, formatieren Sie sie entsprechend Ihren Kriterien und speichern Sie dann das Skript in der Datentabelle.
Um dann das Öffnen einer Tabelle und das Ausführen Ihrer Kontrolldiagramme zu automatisieren, kombinieren Sie einfach die Open-Anweisung aus dem Quellskript und das Kontrolldiagramm-Skript in einem neuen Skriptfenster (trennen Sie die beiden Anweisungen durch ein Semikolon). Da haben Sie es, einen automatisierten Bericht, praktisch ohne Codierung Ihrerseits.
Hier sind zwei einfache Beispiele:
//Beispiel 1
dt = Open( "$SAMPLE_DATA/Tablet Production.jmp" );
dt << Regelkarte(
Diagrammspalte (:Mischzeit, Einzelmessung),
Diagrammspalte (: Mischungsgeschwindigkeit, Einzelmessung),
Chart Col( :Kraft, Einzelmessung ),
Chart Col( :Mill Time, Individual Measurement ),
Diagramm Col (: Beschichtungsviskosität, Einzelmessung),
Chart Col( :Inlet Temp, Individual Measurement )
);
//Beispiel 2, etwas komplexer
Gruppe1 = Ausdruck (
Regelkarte(
Musteretikett (: Beschichtungslieferant),
Diagramm Col (: Beschichtungsviskosität, XBar, R),
Diagramm Col( : Einlasstemperatur, XBar, R )
)
);
Gruppe2 = Ausdr(
Regelkarte (
Diagrammspalte (:Mischzeit, Einzelmessung),
Diagrammspalte (: Mischungsgeschwindigkeit, individuelle Messung)
)
);
win = New Window( "Beispiel für Regelkarte",
H Listenfeld (
"Vertikale Listbox",
Panel Box( "Erste Gruppe von Regelkarten", Gruppe1 ),
Panel Box ("Zweite Gruppe von Regelkarten", Gruppe2)
)
);