根據多列選擇位置<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我不確定是否有一個很好的方法來做我希望做的事情,但我有以下情況:
我有一個數據文件,它是每秒收集測量結果。有一個時間戳列,一個狀態列,然後是我的所有數據列。
狀態列中有三個不同的可能條目,“RAMP”,“WAIT”和“READ”。按時間順序排列數據通常會產生大約20行“RAMP”,然後是85行“WAIT”,接著是9行“READ”,然後重複十幾次。我想要選擇的我感興趣的區域是每個區域中標記為“等待”的最後30行。
顯然,選擇所有“WAIT”行或整個文件的最後30行非常簡單,但我無法弄清楚如何只選擇每個部分的最後30行。
有解決這個問題的好方法嗎?
Re:根據多列選擇位置如何獲取表名和列表項數:
DT = 當前數據表 () ;
dt_name = DT << 得到名字 ;
LST = { “一個” , “B” , “C” } ;
NITEMS ( LST ) ;
使用||將字符串與另一個字符串連接起來:
“串” || ( DT << 得到名字 )
Re:根據多列選擇位置我知道的另一個函數*必須存在,但我找不到 - 當前數據表()返回一個我可以分配給dt的引用,但我正在尋找一種方法來提取表的名稱 - 我有一個腳本我想在許多不同的表上運行,我想在當前表上啟動它,然後創建一個名為“ ”的新子集表。我期待輸出表名(“string”dt)或(“string”$ dt)可以工作,類似的東西,但事實並非如此。我正在尋找文檔,但我想我會把這個評論扔出去以防萬一。
Re:根據多列選擇位置我找到了一種方法來製作我想要的清單 - 我補充道:
last_30_waits = {};
for(j = 1,j <= 3,j ++,
for(i = 0,i <= 3,i ++,
INSERTINTO(last_30_waits,(wait_end_list- 一世))));
dt <<選擇行(last_30_waits);
但我覺得這不是最佳的。還有,是否有一個函數可以返回列表中的條目數?我想在我的第一個for循環中用該函數替換“3”,但是我找不到它。
Re:根據多列選擇位置謝謝,這讓我非常接近,但我還有一個無能為力的問題 - 在每對wait_start_list / wait_end_list數字之間選擇所有*的最佳方法是什麼?我之前沒有使用過列表。(我對一般的腳本非常陌生,但我正努力學習,因為我盡我所能。)
Re:根據多列選擇位置這是一種方法。 您搜索所有WAIT行,然後遍歷行號。 如果有一個大於1的間隙,你就會找到一個部分的結尾。 下面的代碼構建了兩個列表,用於標識每個部分的起始行號和結束行號。 我為這個例子創建了一個小表;改變了 ntail 參數為三十為您的數據。
DT = 新表 ( “溫度” ,
添加行 ( 39 ) ,
新欄目 ( “狀態” ,
字符 ,
公稱 ,
設定值 (
{ “RAMP” , “RAMP” , “RAMP” , “等待” , “等待” , “等待” , “等待” , “等待” , “讀” ,
“讀” , “讀” , “讀” , “讀” , “RAMP” , “RAMP” , “RAMP” , “等待” , “等待” ,
“等待” , “等待” , “等待” , “讀” , “讀” , “讀” , “讀” , “讀” , “RAMP” ,
“RAMP” , “RAMP” , “等待” , “等待” , “等待” , “等待” , “等待” , “讀” , “讀” ,
“讀” , “讀” , “讀” }
)
) ,
) ;
wait_rows = DT << 得到行在哪裡 ( : 狀態 == “等待” ) ;
NR = NROWS ( wait_rows ) ;
wait_start_list = {} ;
wait_end_list = {} ;
old_row = wait_rows [ 1 ] - 1 ;
//要獲取的WAIT行數
ntail = 4 ;
//這將獲得最後4個WAIT行。 替換為30以獲取最後30個WAIT行
對於 ( 一世 = 1 ,一世 <= NR ,一世 ++,
NEW_ROW = wait_rows [ 一世 ] ;
//在行列表中查找大於1的間隙
如果 (( NEW_ROW - old_row ) > 1 ,
插入 ( wait_start_list , ( old_row - ntail + 1 )) ;
插入 ( wait_end_list , old_row ) ;
) ;
old_row = NEW_ROW ;
) ;
//照顧最後一組WAIT
old_row = wait_rows [ NR ] ;
插入 ( wait_start_list , ( old_row - ntail + 1 )) ;
插入 ( wait_end_list , old_row ) ;
Re:根據多列選擇位置不幸的是,我目前只是JMP,沒有基本的SAS - 但感謝你的建議。
Re:根據多列選擇位置你在JMP論壇上發布了這個,所以我不確定這是否有幫助。 使用基礎SAS,如果您使用正確的工具,它是一個相對較短的程序:
數據last_30_waits;
group_num + 1;
n_waits = 0;
直到(last.status和status ='WAIT');
設定測量值(保持=狀態);
狀態未分類;
如果status ='WAIT'則n_waits + 1;
結束;
**此時,group_num標識一組WAIT,n_waits顯示該組中有多少條記錄;
n_found = 0;
直到(last.status和status ='WAIT');
設定測量;
狀態未分類;
如果status ='WAIT'則執行;
n_found + 1;
如果n_found> = n_waits - 29則輸出;
結束;
結束;
drop n_found;
跑;
祝好運。