我無法讓下面的腳本運行。 我並嘗試使用圖形構建器創建自定義圖。 我想這樣做,所以根據被分析的數據量創建一個新的繪圖,並繪製我圍繞每個數據集“wafer2”製作的自定義地圖(我嘗試使用的變量稱為“Dmaps”)。我還希望它根據用戶選擇的分析配方來調整比例尺(腳本的這部分工作正常,忽略“Dscale”引用)。 我正在努力的是獲取我使用for循環生成的字符串以獲得正確的語法或者使該字符串與圖形構建器腳本正確集成。 任何人都可以告訴我我錯過了什麼。
謝謝,
names default to here(1);
UniqueSlots = Associative Array( :Slot ) << get keys;
For( i = 1, i <= N Items( uniqueslots ), i++,
If( i == 1,
Dmaps = Eval("Dispatch( {}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
If( i < N Items( uniqueslots ),
Dmaps = Char( Dmaps ) || Eval(", Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
If( i == N Items( uniqueslots ),
Dmaps = Char( dmaps ) || Eval("Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
);
Show( dmaps );
Dscale = If( Contains( :SetupID[1], "0.026-0.2190um" ) > 0,
Parse( "[0.026 0.219]" ),
If( Contains( :SetupID[1], "0.026-0.2190umDSA" ) > 0,
Parse( "[0.026 0.219]" ),
If( Contains( :SetupID[1], "0.045-0.1421um" ) > 0,
Parse( "[0.045 0.1421]" ),
If( Contains( :SetupID[1], "0.046-0.1215um" ) > 0,
Parse( "[0.046 0.1215]" ),
If( Contains( :SetupID[1], "Post" ) > 0,
Parse( "[0.019 0.1297]" ),
If( Contains( :SetupID[1], "31-56.9nm" ) > 0,
Parse( "[0.031 0.0569]" )
)
)
)
)
)
);
Show( dscale );
script4 = Eval(
Parse(
"Graph Builder(
Size(
If( N Items( Associative Array( :Slot ) << get keys ) <= 16,
585,
1170
),
If( N Items( Associative Array( :Slot ) << get keys ) > 4,
50 * N Items( Associative Array( :Slot ) << get keys ) + Abs( 4 - Modulo( N Items( Associative Array( :Slot ) << get keys ), 4 ) ) /
4,
220
)
),
Show Control Panel( 0 ),
Show Footer( 0 ),
Continuous Color Theme( \!"Spectral\!" ),
Categorical Color Theme( \!"JMP Default\!" ),
Lock Scales( 1 ),
Title Fill Color( {221, 215, 204} ),
Title Frame Color( {221, 215, 204} ),
Level Fill Color( {233, 230, 226} ),
Level Frame Color( {221, 215, 204} ),
Variables(
X( :X ),
Y( :Y ),
Wrap(
:Slot,
Levels( N Items( Associative Array( :Slot ) << get keys ) ),
Levels per Row( If( N Items( Associative Array( :Slot ) << get keys ) <= 16, 4, 8 ) )
),
Overlay( :TIME ),
Color( :DSIZE )
),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch(
{},
\!"X\!",
ScaleBox,
{Scale( \!"Geodesic\!" ), Min( -0.16 ), Max( 0.16 ), Inc( 0.05 ), Minor Ticks( 0 ), Label Row(
{Show Major Labels( 0 ), Show Major Ticks( 0 ), Show Minor Ticks( 0 )}
)}
),
Dispatch(
{},
\!"Y\!",
ScaleBox,
{Scale( \!"Geodesic\!" ), Format( \!"Best\!", 12 ), Min( -0.16 ), Max( 0.16 ), Inc( 0.05 ), Minor Ticks( 0 ),
Label Row( {Show Major Labels( 0 ), Show Major Ticks( 0 ), Show Minor Ticks( 0 )} )}
),
Dispatch(
{},
\!"400\!",
ScaleBox,
{Legend Model(
3,
Properties(
0,
{gradient(
{Color Theme( \!"Green Yellow Red\!" ), Scale Values(
"|| char(DScale) ||"
), Label Format( \!"Fixed Dec\!", 15, 3 ), N Labels( 5 )}
)}
)
)}
),
Dispatch( {}, \!"graph title\!", TextEditBox, {Set Text( :lot[1] )} ),
Dispatch( {}, \!"400\!", LegendBox, {Set Title( \!"\!" )} ),
"|| char(parse(Dmaps)) ||"));"
)
);
謝謝,該代碼看起來更清潔。
我有自定義地圖文件附加的樣本數據(需要粘貼在C:\ Program Files \ SAS \ JMP \ 13 \ Maps中)。 使用您編寫的腳本編輯,我得到一個沒有任何地圖的圖表以及以下錯誤:
出乎意料的“,”。也許有一個缺失的“;”要么 ”,”。
第3行第32列:......線條順序(3)})►,Dispatch({},“Graph Bui ...
剩下的文字被忽略了
,Dispatch({}“,”Graph Builder,FrameBox(12),{Background Map(Boundaries“(”Wafer2“)),
標記尺寸(3),網格線順序(2),參考線順序(3)}),調度({}“,”
Graph Builder,FrameBox(13),{Background Map(Boundaries“(”Wafer2“)),Marker Size(3),
網格線順序(2),參考線順序(3)})Dispatch({}“,”Graph Builder,FrameBox(
14),{背景圖(邊界)(“Wafer2”),標記尺寸(3),網格線順序(2),
參考線訂單(3)})
在{}處找不到FrameBox [“Graph Builder”]
圖形生成器[]
我已經檢查了你的腳本,並且沒有一些樣本數據可供使用,它應該比我更進一步。
我發現了一個邏輯錯誤,你的Dmaps值永遠不會以你為i == 1的比較設置的值結束。 這是因為,當i == 1時,它下面的If子句也會執行,因為當i等於1時,它也小於N個項目(uniqueslots)。
我建議使用以下代碼重構該代碼:
If(
i == 1,
Dmaps = Eval(
"Dispatch( {}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) ||
"),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
),
i < N Items( uniqueslots ),
Dmaps = Char( Dmaps ) || Eval(
", Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) ||
"),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
),
i == N Items( uniqueslots ),
Dmaps = Char( dmaps ) || Eval(
"Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) ||
"),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
/*);
If( i < N Items( uniqueslots ),
Dmaps = Char( Dmaps ) || Eval(", Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
If( i == N Items( uniqueslots ),
Dmaps = Char( dmaps ) || Eval("Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);*/
);
同樣,您可以使用以下內容刪除第二個If結構中的所有嵌套IF
Dscale = If(
Contains( :SetupID[1], "BareSiPre0.026-0.2190um" ) > 0, Parse( "[0.026 0.219]" ),
Contains( :SetupID[1], "BareSiPst0.026-0.2190umDSA" ) > 0, Parse( "[0.026 0.219]" ),
Contains( :SetupID[1], "LTALDOX300A0.045-0.1421umDSA" ) > 0, Parse( "[0.045 0.1421]" ),
Contains( :SetupID[1], "ALDOX2500A0.046-0.1215umDSA" ) > 0, Parse( "[0.046 0.1215]" ),
Contains( :SetupID[1], "BKM_BareSi_19nmPost_OHS" ) > 0, Parse( "[0.019 0.1297]" ),
Contains( :SetupID[1], "LTALDOx180A31-56.9nm" ) > 0,
Parse( "[0.031 0.0569]" )
/*If( Contains( :SetupID[1], "BareSiPst0.026-0.2190umDSA" ) > 0,
Parse( "[0.026 0.219]" ),
If( Contains( :SetupID[1], "LTALDOX300A0.045-0.1421umDSA" ) > 0,
Parse( "[0.045 0.1421]" ),
If( Contains( :SetupID[1], "ALDOX2500A0.046-0.1215umDSA" ) > 0,
Parse( "[0.046 0.1215]" ),
If( Contains( :SetupID[1], "BKM_BareSi_19nmPost_OHS" ) > 0,
Parse( "[0.019 0.1297]" ),
If( Contains( :SetupID[1], "LTALDOx180A31-56.9nm" ) > 0,
Parse( "[0.031 0.0569]" )
)
)
)
)
)*/
);