有關子集創建的更多信息您好,我指的是今年 5 月的貼文https://communities.sas.com/message/166376#166376 。
此範例解釋如何透過 1) 首先新增 af 資料過濾器,2) 然後子集化來建立新資料表:
dt = 開啟(BigClass);
dt << 資料過濾器(新增過濾器(列(:年齡),其中(:年齡== {12,13}),模式(選擇(1)));
子 1 = dt<
結果,創建了一個名為「regions」的資料表。正如預期的那樣。
我使用自己的資料集創建了一個類似的範例(BigClass 範例有效!),但它對我來說效果不佳。我懷疑我對某些事情有誤解。這是我的程序流程附件。
BigClass 範例和我的範例之間的差異在於,當我執行整個腳本時,不會選擇資料過濾器。 (我省略了從 Excel 文件載入文件的操作,以便能夠向您發送原始程式碼,其中包含某些名稱)。解釋一下:有一個字元列,我想從中僅選擇該列中的文字以“d”或“I”開頭的那些行。我發現有必要建立一個新列來執行資料過濾。當我總共運行程式碼時,不會選擇行,也不會建立子集資料表。如果我先執行程式碼直到建立新列 Onelettet,然後執行資料過濾器,則會建立篩選器並選擇行。最後建立子集資料表。但是這些事情應該以腳本運行的方式發生嗎?或者?
這是使用腳本的基礎,因此我需要深入了解這些微妙之處。
問候
波爾
回覆:有關子集創建的更多信息使用MS的範例程式碼,這是一個非常健壯的直接解決方案,因為它不需要資料表中的行切換到選定狀態:
dt = 新表( “測試” ,
新增行( 5 ) ,
新列( “Instr” ,字符,
設定值( { “鼓” , “喇叭” , 「七弦琴」 , “單簧管” , 「迪吉里杜管」 } )
)
);
sel = dt << 取得行 where (開頭為( : instr , "d" ) |開頭為( : instr , "l" ) ) ;
dt << 子集(輸出表名( "sel instr" ) ,行( sel ) ,選定列( 0 ) ) ;
回覆:有關子集創建的更多信息如果您提供了參考,關閉資料過濾器很簡單。
df = dt << 數據過濾器( ... ) ;
df << 關閉;
回覆:有關子集創建的更多信息嗨女士,
添加等待();公式求值解決了執行子集指令之前未設定篩選器的問題。謝謝。
關閉過濾視窗的命令是什麼?我不希望它在子集之後保留在螢幕上。我只想要資料集。事實上我根本不需要看到它。
是的,我認為選擇可以在一份聲明中完成。只是不知道怎麼做。
謝謝
波爾
回覆:有關子集創建的更多信息如果沒有用於測試程式碼的表,很難說出為什麼它在特定情況下不起作用。如果程式碼依賴在同一腳本中建立的列公式,我發現公式計算可能會滯後於腳本執行,這可能會導致意外結果。為了避免這種情況,可以嘗試在關鍵步驟插入Wait()或<< eval 公式。
但是在這種特殊情況下,如果我理解正確,則不需要新列(或資料過濾器)。也許下面的例子可以有所幫助。
//範例表
dt = 新表( “測試” ,
新增行( 5 ) ,
新列( “Instr” ,字符,
設定值( { “鼓” , “喇叭” , 「七弦琴」 , “單簧管” , 「迪吉里杜管」 } )
)
);
// 使用資料過濾器選擇以 d 或 l 開頭的指令
sel = dt <<取得行 where (開頭為( : instr , "d" ) |開頭為( : instr , "l" ) ) ;
dt << 數據過濾器(
新增篩選器(列( : instr ) ,其中( : instr = : instr [ sel ] ) ,模式( select ( 1 ) ) )
);
dt << subset (輸出表名( "sel instr" ) ,選定的行( 1 ) ,選定的列( 0 ) ) ;
// 或更直接的方法,無需資料過濾器
dt <<選擇其中(開頭為( : instr , "d" ) |開頭為( : instr , "l" ) ) ;
dt << subset (輸出表名( "sel instr" ) ,選定的行( 1 ) ,選定的列( 0 ) ) ;