For Loop不能正確評估公式。<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在嘗試在數據表中創建新列,每個新列都是現有列的Z分數。 這就是我所擁有的
Colnames_1st = dt_zscore3 <<獲取列名();
nlist = N項(Colnames_1st);
for(i = 5,i <= 10,i ++,
var1 = Column(Colnames_1st );
mean = Col Mean(var1);
stdev = Col Std Dev(var1);
namevar = char(Colnames_1st );
新欄目(“Zscore”|| namevar,
數字,連續,
格式(“最佳”,12),
公式((((var1 []) - mean)/ stdev)));
);
代碼創建了6個新列並正確命名。
但是當它填寫所有列中的值時,它無法正確執行。
所有列在每行中都以相同的值結束。 它看起來像我喜歡它
正在創建列,但是等待直到for循環結束才能計算出來
在所有列的每一行中的值,因此它使用all的最後一個值
所有列的變量,而不是計算每個列的公式
列使用該列應使用的值。
我真的被卡住了。 我嘗試過各種各樣的事情,但無法克服這個障礙。
任何幫助將非常感激。
Re:For Loop不能正確評估公式。我認為您的解決方案可能存在問題。它可以在創建列時工作,但不能在另一個會話中工作,或者在源列中更改或添加數據。
如果你看一下新列中的公式,我懷疑它們看起來都像“(var1 [] - mean)/ stdev”。這些變量名只在當前腳本上下文中有意義(甚至在特定的for循環迭代中。如果重新定義或清除變量,則公式將無法正常工作。
應該按字面輸入公式,因為Formula()參數中的變量顯然沒有被計算,而是按字面意思來計算。如果必須使用變量,例如在for循環中,這可以通過操縱字符串或表達式來實現。
在評估表達式之前使用evalexpr()評估表達式中的表達式的示例:
DT = 打開 ( “$ SAMPLE_DATA / Big Class.jmp” ) ;
ñ = N Col ( DT ) ;
對於 ( 一世 = 4 ,一世 <= ñ ,一世 ++,
VAR1 = 柱 ( 一世 ) ;
EVAL (
Eval Expr (
DT << 新欄目 ( “Zscore” || ( VAR1 << 得到名字 ) ,
數字 ,
連續 ,
式 ( Col標準化 ( EXPR ( VAR1 ) ) )
)
)
) ;
) ;
Re:For Loop不能正確評估公式。我想我終於找到了解決方案。
我有一種感覺,我的問題在某種程度上將變量定義為本地和全局,但無論我嘗試什麼,我都無法弄清楚如何以這種方式修復它。
相反,我添加了這條線
dt_zscore3 <<運行公式
現在它正確地做到了。
Colnames_1st = dt_zscore3 <<獲取列名();
nlist = N項(Colnames_1st);
for(i = 5,i <= nlist,i ++,
名稱默認為此處(1);
var1 = Column(Colnames_1st );
// var1 = Column(Colnames_1st );
mean = Col Mean(var1);
stdev = Col Std Dev(var1);
namevar = char(Colnames_1st );
新欄目(“Zscore”|| namevar,
數字,連續,
格式(“最佳”,12),
公式((((var1 []) - mean)/ stdev)));
dt_zscore3 <<運行公式
);
這可能不是優雅或最正確的方式,但我發布它以防任何人發現它有用。