Hallo,
Ich möchte ein Skript mit einer for-Schleife schreiben, um Boxplots mit horizontalen Referenzlinien zu generieren und es zu speichern. Ich kann es auch im Graph Builder machen, aber mein Datensatz ist riesig, sodass das manuelle Hinzufügen einer Referenzlinie zu viel Zeit in Anspruch nehmen würde.
Ich muss zwei Datentabellen erstellen, eine zum Generieren der Datentabelle und die andere zum Generieren von Referenzzeilen.
Ich möchte eine Schleife zum Boxplot-Spieler (in diesem Fall „a“ und „b“) auf der X-Achse haben und die Spalte würde für alle Spiele („Badminton“, „Tischtennis“, „Rasentennis“) wechseln. Das JMP-Skript würde auch eine weitere Datei lesen, die Referenzlinien enthält und Referenzlinien eines bestimmten Spiels mit dieser bestimmten Handlung überlagert.
Bitte helfen Sie, ein Skript für diese Anforderung zu schreiben.
Danke 
| Spiel | Referenzzeile 1 | Referenzzeile 2 |
| Badminton | 7 | 1 |
| Tischtennis | 8 | 2 |
| Rasentennis | 6 | 3 |
| Spieler | Zone | Badminton | Tischtennis | Rasentennis |
| A | Norden | 2 | 2 | 3 |
| A | Norden | 3 | 6 | 3 |
| A | Norden | 4 | 6 | 5 |
| A | Norden | 5 | 2 | 2 |
| A | Norden | 2 | 5 | 6 |
| A | Norden | 4 | 5 | 6 |
| A | Norden | 4 | 3 | 6 |
| A | Norden | 4 | 5 | 2 |
| A | Norden | 9 | 7 | 6 |
| A | Norden | 5 | 0 | 5 |
| B | Süd | 1 | 3 | 7 |
| B | Süd | 2 | 4 | 7 |
| B | Süd | 4 | 7 | 8 |
| B | Süd | 3 | 6 | 3 |
| B | Süd | 6 | 4 | 5 |
| B | Süd | 2 | 2 | 2 |
| B | Süd | 5 | 8 | 6 |
| B | Süd | 6 | 5 | 2 |
| B | Süd | 7 | 2 | 3 |
| B | Süd | 6 | 4 | 6 |
Dann müsste ein anderer Ansatz gewählt werden.Reaktionsgrenzen unterstützen nur „Lower“, „Middle“ und „Upper“.
Hier ist ein einfaches Skript, das mit den von Ihnen bereitgestellten Datentabellen arbeitet und alle Referenzlinien grafisch darstellt
Names Default To Here( 1 );
dtMain = Data Table( "Main" );
dtLimits = Data Table( "Limits" );
// Get the columns to create box plots for
boxPlotList = dtMain << get column names( string, numeric );
// Get the columns that contain limits
refLineList = dtLimits << get column names( string, numeric );
// Loop across the box plot columns and generate the box plots
For( i = 1, i <= N Items( boxPlotList ), i++,
ow = Oneway( Y( Column( boxPlotList[i] ) ), X( :Player ), Box Plots( 1 ) );
// Find out if any reference line references are specified for the current
// box plot column
refLineMatrix = dtLimits << get rows where( :game == boxPlotList[i] );
// If references are found, then loop across the columns and rows in the Limits table
// and add the reference lines
If( N Rows( refLineMatrix ) > 0,
For( refRow = 1, refRow <= N Rows( refLineMatrix ), refRow++,
For( refCol = 1, refCol <= N Items( refLineList ), refCol++,
refLineValue = Column( dtLimits, refLineList[refCol] )[refRow];
Report( ow )[AxisBox( 1 )] << Add Ref Line( refLineValue, "Solid", "Black", "", 1 );
)
)
);
);Hier ist ein Skript, das zunächst die beiden Datentabellen erstellt, die Sie in Ihrem ersten Eintrag angezeigt haben, gefolgt von dem Code, der die Grenzwerte aus der Grenzwerttabelle kopiert und sie auf jede Spalte in der Haupttabelle anwendet
Names Default To Here( 1 );
dtMain = New Table( "Main",
Add Rows( 20 ),
New Column( "Player",
Character,
"Nominal",
Set Values(
{"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"}
)
),
New Column( "Zone",
Character,
"Nominal",
Set Values(
{"North", "North", "North", "North", "North", "North", "North", "North", "North", "North", "South",
"South", "South", "South", "South", "South", "South", "South", "South", "South"}
)
),
New Column( "Badminton",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 3, 4, 5, 2, 4, 4, 4, 9, 5, 1, 2, 4, 3, 6, 2, 5, 6, 7, 6] )
),
New Column( "Table Tennis",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2, 6, 6, 2, 5, 5, 3, 5, 7, 0, 3, 4, 7, 6, 4, 2, 8, 5, 2, 4] )
),
New Column( "Lawn Tennis",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [3, 3, 5, 2, 6, 6, 6, 2, 6, 5, 7, 7, 8, 3, 5, 2, 6, 2, 3, 6] )
)
);
dtLimits = New Table( "Limits",
Add Rows( 3 ),
New Column( "Game",
Character,
"Nominal",
Set Values( {"Badminton", "Table Tennis", "Lawn Tennis"} ),
Set Display Width( 128 )
),
New Column( "Reference Line 1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [7, 8, 6] ) ),
New Column( "Reference Line 2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3] ) )
);
// Here is the code that sets the Response Limits
For( i = 1, i <= N Rows( dtLimits ), i++,
If( Try( (Column( dtMain, (Column( dtLimits, "Game" )[i]) )) << get name, "" ) != "",
Eval(
Substitute(
Expr(
Column( dtMain, Column( dtLimits, "Game" )[i] ) << set property(
"response limits",
{Goal( Maximize ), Lower( __Low__, 1 ), Upper( __up__, 1 ), Importance( 1 ),
Show Limits( 1 )}
)
),
Expr( __Low__ ), dtLimits:Reference Line 2[i],
Expr( __Up__ ),
dtLimits:Reference Line 1[i]
)
)
)
);