<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />幾個月前我試著問這個問題,但我很迷茫,以至於我的解釋語無倫次。然後我還沒來得及解釋就被分配了。所以這是我希望更好的嘗試來解釋我想要什麼以及什麼不起作用。
我在做什麼:我正在創建一個使用會不斷變化的大型數據集的腳本,儘管列名永遠不會。我需要執行各種摘要和公式。我的策略是做一些匯總表來確定我擁有哪些類別的數據。下面的示例是我正在嘗試做的一個很好的簡單示例。它使用大的 class.jmp 文件並正在尋找性別類別。在它知道類別“M”、“F”之後,它將為每個變量類別創建新列,在這種情況下命名為 :Example-F 然後 :Example-M 並且在每個新列中都會有一個引用其他變量的公式列並引用正在創建的新列進行行計算。
我的問題:我無法讓列引用工作,特別是調用正在創建公式的同一列的變量.見下文
//開始
嘗試(關閉(dt,不保存));
嘗試(關閉(dt_categories,不保存));
嘗試(關閉(dt_data,不保存));
清除全局變量();
dt = 打開(“小路\big_class.jmp");
//創建性別列表並替換名稱。這裡沒有問題。
dt_categories = dt << 摘要(
組(:SEX),
統計列名格式(“列”),
輸出表名(“Gender_Summary”));
性別列表 = dt_categories:sex<<獲取值;
性別計數= nrows(dt_categories);
dt_data = dt << Split(Split By(:SEX), Split(:HEIGHT), Output Table("Split_Big_Class"), Remaining Columns(Drop All)
);
For(i=1, i<=gendercount, i++,
//oldcol 是從性別列表創建的,但代表新 dt_data 上的列名,我的公式將引用它們。這裡沒有問題。
舊科爾=列(性別列表);
//我必須將新列命名為與現有(舊)列不同的名稱,否則 jmp 將增加名稱,並且看起來它真的會弄亂我的列名引用。這裡沒有問題,我不認為。
新名稱= ("示例-"||性別列表);
//接下來,我已經嘗試先創建列,以便後續公式可以引用已經存在的列,但我不知道這是否有必要。
紐科爾= dt_data << 新列(新名稱, 數字);
//下一行是一個函數公式,但不使用我的變量作為參考。你可以用來看看我在做什麼。
//新名稱<< 公式(If(Row() == 1, 1 + :F, :Name("Example-F")[Row() - 1,Empty()] + 1));
//下一行是無效的公式,因為我試圖在上面的有效公式中插入我的變量。這是它拋出錯誤的地方。
新名稱<< 公式(如果(行() == 1, 1 +舊科爾,紐科爾[行() - 1,空()] + 1));
);
有什麼建議麼?我對編寫腳本還很陌生,並且我在嘗試學習。謝謝!!!!!
對不起,我錯過了你的台詞,展示了你想要製作的東西。
嘗試這個:
dt1 = Open("$SAMPLE_DATA/Big Class.JMP");
總結(類別=按(:性別));
dt2 = dt1 << Split(Split By(:SEX), Split(:HEIGHT), Output Table("Split_Big_Class"), Remaining Columns(Drop All));
for(i=1, i<=nItems(類別), i++,
dt2 << newColumn("示例-" || 類別, 特點,公式(
如果(行() == 1,
1 + asColumn(類別),
asColumn("示例-" || 類別)[行() - 1] + 1
);
);
);
);
你能用文字解釋一下你想讓你的公式產生什麼嗎?
看起來您正在嘗試根據前一行數據創建值 - 隨時添加?
如果你詳細說明你希望最終結果是什麼——如果可能的話,舉個例子,那就太好了。