假設我有一個包含5行2列的表。 第一列用於分佈類型(例如,正態,對數正態,Weibull等),第二列用於各個參數。 我想創建一個for循環,該循環將為5行中的每行創建一個新數據表,在該新數據表中,將添加一個新列,並根據該行的參數添加一個隨機採樣函數。
例如第1行->普通(0.1,0.02);創建一個新數據表,其列的公式為
randomnormal(0.1,0.02)
我當前的挑戰是不同的分發類型需要不同數量的參數。 讚賞一些有關我應該如何處理此問題的見解。
你好
一些想法:
1)如果可能的話,我會將參數分成幾列以使公式的腳本編寫更容易
2)我將使用MATCH公式查找分佈的名稱,並專門為對應的分佈調用Random函數
Match( :Distribution,
"Normal", Random Normal( :Parameter 1, :Parameter 2 ),
"LogNormal", Random Lognormal( :Parameter 1, :Parameter 2 ),
.
)
這是一個簡單的示例,說明如何執行您要求的操作
Names Default To Here( 1 );
dt = New Table( "Sample",
Add Rows( 5 ),
New Column( "Types",
Character,
Set Values(
{"Normal", "Lognormal", "Weibull", "Uniform", "Johnson Su"}
),
Set Display Width( 79 )
),
New Column( "Parameters",
Character,
Set Values(
{"(0.1,0.02)", "(0.2,.005)", "(0.3,0.005)", "(0.1,0.5)",
"(0.5, 1, 1, 1)"}
),
Set Display Width( 101 )
)
);
For( i = 1, i <= N Rows( dt ), i++,
Eval(
Substitute(
Expr(
New Table( dt:Types[i],
add rows( 20 ),
New Column( "Random " || dt:Types[i],
set each value( __formula__ )
)
)
),
Expr( __formula__ ),
Parse( "Random " || dt:Types[i] || dt:Parameters[i] )
)
)
);
請花點時間充分了解腳本的工作原理,如果您不理解腳本,請回覆以便社區可以為您提供您可能需要的其他信息。
感謝Thierry,如果我想限制參數的列數,有什麼建議嗎?
我還有一個擔心,我相信Match()公式區分大小寫。 我可以嘗試通過在列上放置一個列表檢查來控制它。 還有其他控制/管理方式嗎?