在循環中如何指示 [I] 的其他列你好。
我不得不再次尋求幫助。 我編寫了一個腳本來計算數字列的值與下一個列的值之間的變化百分比。 不幸的是,我收到一個錯誤:“列 1897_Canvi 公式中斷
無法將參數轉換為數字 [或矩陣] 1 次在行:{1} 操作:減,numericColNames [X] - numericColNames [i]
公式評估錯誤已被忽略"
這是 numericColNamesn:
{“_1842_”、“_1877_”、“_1887_”、“_1897_”、“_1900_”、“_1910_”、“_1920_”、“_1930_”、“_1940_”、“_1950_”、“_1960_”、“ _1970_”、“_1981_”、“_1991_”、“_2001_”、“_2011_”、“_2018_”}
這是有問題的腳本:
Names Default To Here( 1 );
dt = Current Data Table();
numericColNames = dt << get column names( string, numeric );
For( i = 2, i <= N Items( numericColNames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( numericColNames[i] ) || "_Canvi",
Numeric,
Continuous,
Format( "Percent", 12, 1 ),
X = i - 1,
Formula( (numericColNames[X] - numericColNames[i]) / numericColNames[X] )
)
),
Expr( __col__ ), Parse( ":Name (\!" " || numericColNames[i] || "\!")" )
)
)
);回复:在循環中如何指示其他列 [I]再一次問好。 我打算計算隨著時間的推移在特魯埃爾省(西班牙)進行的連續人口普查中居民人數的百分比變化。 我的目的是將人口普查與以下人口普查進行比較。 在我附上(部分)的數據表的第一列中,記錄了自治市的名稱,在以下六個中,每個自治市的居民出現在不同的人口普查中。 為了計算匯率,我計算了一次人口普查和下一次人口普查之間的差異,結果除以第一次人口普查,然後我將獲得的值表示為百分比。即 (_1842_ - _1877_) / _1842_

回复:在循環中如何指示其他列 [I]1980 列名導致了一個問題,該問題通過在列規範周圍放置一個 :Name("1980") 來解決。這不是使用 Substitute() 函數的原因。Substitute() 函數在那裡,因為您不希望為列保存的公式具有值
(numericColNames[X] - numericColNames[i]) / numericColNames[X] )
而是擁有價值
( __1980__ - __1960__ / __1980__ )
如果公式具有我指定的第一個語法,則意味著只要您的 JMP 會話更改以下任何值:i、X、numericColNames,公式就會失敗。換句話說,如果您保存數據表,結束 JMP 會話,然後再次啟動 JMP,則變量 i、X 或 numericColNames 都不會出現在新的 JMP 會話中,因此當您打開數據表時,所有具有引用這些變量的公式的列將失敗。
最後,我不確定您目前發現的問題是什麼。如果您可以提供數據樣本,我至少有機會找出問題所在。
回复:在循環中如何指示其他列 [I]首先,感謝您的幫助。 當我運行你的腳本時,我得到了錯誤:
在以下腳本中,錯誤標記為 / * ### * /
替換 / * ### * / (Expr (...
這部分腳本是您在過去的帖子中建議的,因為列的名稱是整數,例如 1980。 如果代替 1980 是“_1980_”,則可以消除替代品。
運算符“\!”是什麼意思?在“:名稱”之後。
再次感謝您的教誨。
回复:在循環中如何指示其他列 [I]您沒有正確設置 Substitute() 函數。
代入和代入
Substitute() 函數返回帶有替換錶達式的字符串副本。 這
Substitute Into() 函數使用替換錶達式更改原始字符串。
例如,考慮以下腳本:
str1 = str2 = "All things considered";
str3 = Substitute( str1, "All", "Some" );
// str3 holds the result of the Substitute, and str1 is not changed
str4 = Substitute Into( str2, "All", "Some" );
// Substitute Into returns nothing, so str4 is missing, and str2 is changed
// and now holds the result of Substitute Into
Show( str1, str2, str3, str4 );
此腳本返回以下輸出:
str1 = "考慮所有因素";
str2 = "考慮的一些事情";
str3 = "考慮的一些事情";
str4 = .;
我已經修改了你的腳本,我猜這就是你想要的
Names Default To Here( 1 );
dt = Current Data Table();
numericColNames = dt << get column names( string, numeric );
For( i = 2, i <= N Items( numericColNames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( numericColNames[i] ) || "_Canvi",
Numeric,
Continuous,
Format( "Percent", 12, 1 ),
X = i - 1,
Formula( (__colX__ - __coli__ / __colX__ )
)
),
Expr( __coli__ ), Parse( ":Name (\!" " || numericColNames[i] || "\!")" ),
Expr( __colX__ ), Parse( ":Name (\!" " || numericColNames[X] || "\!")" )
)
)
);
Substitute() 函數文檔是從 Scripting Guide 複製的
幫助==>書籍==>腳本指南