通過轉置將數據子集從一個表移動到第二個表的列很抱歉再次發布此信息。 我在這裡發布了工作流程的點點滴滴,在此處進行了掩飾,以尋求幫助,但我仍在努力。 我在檢查響應時遇到困難,因為我對StackOverflow感到不好,沒有真正的原因。 我敢肯定,隨著時間的流逝,傷疤會he愈。 無論如何,我在附近,最終我會得到您的答复。
要達到技術要點:
我正在嘗試將一些示例的運行日期(假設我在項目的實驗室部分中一切正常,假設每個實例都在3次獨立運行的情況下,應該分別運行3次)複製到清單文件的三個單獨列中從我收集到的信息中,它可以跟踪項目中正在進行的元數據,因此每一列都是數據收集的一個實例。 有多個捐贈者,每個捐贈者都有一個捐贈者ID,並且在數據中有些冗餘,例如儀器上針對“相同數據點”的多個收集通道(取決於您如何看待它),儘管我認為應該是這樣。
這是我一直在嘗試的偽代碼,到目前為止,它還很粗糙。 我不知道為什麼 我不是經驗豐富的計算機科學家,開發人員或軟件工程師。 任何幫助表示讚賞。
DataTypes:
(associative array) DonorID{
(key) Month1: (value) date1 (empty at start)
(key) Month2: (value) date2 (empty at start)
(key) Month3: (value) date3 (empty at start)
}
find unique donor IDs in data
for each donor ID{
get (i.e. subset) data keyed on donor ID;
for Month in 1, 2, 3 (strings){
if no date in donorID associative array{
add date from data;
}else if date already{
is the date in the data table cell the same as in the associative array entry?
if yes, do nothing (indicates different target channel)
if no, ping user
Multiple run dates for same data point is a problem.
}
}
}
Copy from data to manifest:
loop over DonorID associative array:
for each donorID:
in Month 1, 2, or 3:
add date1 2 or 3 to "Actual Month [1, 2, or 3] Stability Test Date" in manifest
donorID is still row identifier
date (1, 2, or 3) is now column identifier腳本編寫回复:通過轉置將數據子集從一個表移動到第二個表的列你好,
歡迎來到社區! 很抱歉,您在尋求幫助時在其他委員會上遇到過負面經驗。 雖然JMP用戶社區是一個歡迎和幫助的場所,但是有些“最佳實踐”應該使您獲得所需信息的機會最大化。
提出具體的問題,更普遍的問題,是您能否解決的方法,儘管我確實意識到有時一個“不知道他不知道的事情”。 發布大量的偽代碼可能會使人們感到恐懼……如果您無法以其他方式提出問題,則附加“前”和“後”文件以及屏幕截圖將大有幫助,因此觀眾將獲得具體的信息。 “開始”表(或文本數據)和“完成”表的示例。 在這種特殊情況下,這肯定會帶來真正的改變。 如果必須“清理”數據集,那就很好(最好,真的)。 只要您想說明的觀點仍然可以理解,那就很好了。
如果您提出針對性強的特定問題,並包括說明性文件和屏幕截圖,則可能有很多人會為您提供幫助。 我能想到的很多副手實在無法抗拒!
乾杯,
布雷迪
回复:通過轉置將數據子集從一個表移動到第二個表的列謝謝布雷迪。回复:通過轉置將數據子集從一個表移動到第二個表的列大家好。 到目前為止,這是我的代碼:
Names Default To Here( 1 );
dt_data = Open( "[filepath, no issues here]" );
dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} ); //it appears in the print statements we get 3 copies, indicating this loop works
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
Write( ID ); //just a check; works
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data); //does not work
//...continue with further code to transfer from LBCM_array to manifest
);
);我已經對其進行了清理,以使其成為機密信息(不必擔心監視公司信息;),同時保留結構和信息(名稱“ a”的名稱,以標籤表示的標籤)。
我的問題是此刻此行:
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
拋出錯誤信息
.
Name Unresolved: Run date in access or evaluation of 'Run date' , :Run date/*###*/
In the following script, error marked by /*###*/
...
data_array[data] = :Run date/*###*/ <<WHERE></WHERE>
:運行日期是我的數據表(特別是dt_data)中包含實驗運行日期的數據列(標題)。 我正在嘗試將它們傳輸到第二個文件,因為每個數據點應該已經被收集了三次/三次,所以這就是為什麼data_array在初始化時具有三個鍵和三個空值。 關聯數組(data_array)是數據去向的地方。 然後將其傳送到dt_manifest,但是稍後,一旦這部分工作了,便會再發送給dt_manifest。
目前,我似乎無法訪問該行
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
我感興趣的行和列的適當選擇。 問題陳述在這個時間點是否足夠清晰,以使聽眾中的任何人都可以介入,並提供解決方案或貢獻,以關於如何以句法(或語義上)更正確的方式指定如何選擇數據集的方式對(來自data_dt)感興趣?
不用擔心移調問題。 稍後我將進行處理,老實說,一旦數據位於aa(關聯數組)中,這應該很容易。 在這一點上,我仍在學習如何處理行/列選擇,數據表的子集等相關問題。
還有一點要注意:如果日期,數據和數組混合在一起似乎很奇怪,那很可能是因為我為數據列或相關數據實體的清理/匿名化標題/標籤選擇了較差的名稱,以確保公司機密的安全。 我要說的整個過程仍然是菜鳥,我寧願在安全方面犯錯誤。
從頭到尾,我將繼續致力於解決這個問題。
非常感謝,
麥克風
回复:通過轉置將數據子集從一個表移動到第二個表的列麥克風,
對於為什麼要使用關聯數組,我仍然有些困惑,但是無論如何,我相信下面的代碼將進入該數組,每個ID的3個測量行的日期值。我整理了一些數據,希望它們與您的數據佈局相似。我只是根據您的陳述和代碼用法來猜測。

這是腳本。上面的數據表是在腳本的開頭生成的,因此,經過我的修改的代碼膽量低於數據表的生成。
Names Default To Here( 1 );
dt_data = New Table( "Example",
Add Rows( 6 ),
New Column( "ID", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B"} ) ),
New Column( "Run Date",
Numeric,
"Continuous",
Format( "m/d/y", 12 ),
Input Format( "m/d/y" ),
Set Values( [3692304000, 3694982400, 3697401600, 3700080000, 3702672000, 3705350400] )
),
New Column( "TimePoint", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., ., ., ., ., .] ) )
);
//dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
theRows = dt_data << get rows where( :ID == ID );
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} );
k=0;
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
k++;
show( ID ); //just a check; works
data_array[data] = :Run date[theRows[k]];
//...continue with further code to transfer from LBCM_array to manifest
);
show(data_array);
);
代碼的結果在日誌中列出
ID = "A";
ID = "A";
ID = "A";
data_array = ["data1" => 3692304000, "data2" => 3694982400, "data3" => 3697401600];
ID = "B";
ID = "B";
ID = "B";
data_array = ["data1" => 3700080000, "data2" => 3702672000, "data3" => 3705350400];
data_array中的數字是運行日期的數值。
回复:通過轉置將數據子集從一個表移動到第二個表的列你好,
你寫:
我的問題是此刻此行:
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
我看到了一些潛在的問題...請務必仔細研究以下問題:
1):如所寫,運行日期指的是在解釋此行代碼時當前數據表中的列。 從錯誤消息看來,在解釋此行代碼時,當前數據表不包含稱為“運行日期”的列。 我看到您打開了兩個表;如果將要使用的表留給JMP,請始終確保目標表確實是當前表。 您可以使用“當前數據表”命令強制將要成為當前表的任何表:
dt1 = open("firstfile");
dt2 = open("secondfile");
Current Data Table (dt1); // sets first table current
Current Data Table (dt2); //sets second table current
但是,您不必由JMP來決定。 您可以使用桌子:欄格式,如:
dt1:Run Date
2)解決表格貨幣問題後,您需要使用<<獲取行,其中()消息,發送到適當的數據表,以返回滿足某些條件的行。 通常,就像您的情況一樣,它們被用作索引。 假設您要使用dt1,則代碼將顯示為:
data_array[data] = dt1:Run Date[dt1 << Get rows Where(:ID == ID & :Timepoint == data)];
該行完成3項工作:
1)獲取dt1中滿足某些條件的行,並以向量形式返回它們。 請注意,因為<<獲取行where()消息發送到dt1時,可以理解:ID和:Timepoint也在dt1中。
2)使用在上面的步驟1中返回的向量作為dt1:Run Date(dt1中的“運行日期”列)的索引。 因為我們已使用dt1:Run Date將運行日期明確地限定於dt1表,所以dt1是否碰巧是當前表都沒有關係。 第二步完成後,會從“運行日期”列返回一個值的向量-正是我們想要的值。
3)將上述步驟2中返回的“運行日期”值的向量分配為特定鍵的值,數據,在關聯數組中數據數組。
乾杯,
布雷迪
回复:通過轉置將數據子集從一個表移動到第二個表的列嗨,吉姆。 感謝您的答复。 您介意用人工英語解釋您的代碼如何工作嗎? 我的解釋是:ID唯一的所有行都放在theRows中。 然後,實例化索引k。在將運行日期添加到數據數組的循環內,它會遞增。現在,在此循環內,而不是我以前擁有的,Rows中的每個唯一值都用作訪問:Run date的索引,並且該結果填充到數據數組中。
如果只學習更長的時間,這對我來說是有意義的。 乍一看還不太清楚。 沒有把握。 但是,您確實會在文章結尾用一句話的結論來解釋。
在用代碼中的實際變量替換所有清理後的變量後,出現錯誤:
invalid subscript (must be number or list of numbers) in access or evaluation of 'theRows[k]' , theRows[/*###*/k]
而且我不知道為什麼。
我仍然很困惑,我將繼續研究這段代碼。 奇怪的是,我在大學裡上過很多編碼課,但是我沒有維護自己的知識庫,所以我認為它可能會隨著時間的流逝而逐漸消失。
感謝您的幫助!
麥可
PS:關於為何使用關聯數組:作為具有JMP入門經驗的JMP初學者,這將是一種有效的數據傳輸方式,它具有更多的Java / Python經驗。 您是否建議直接操作表格? 不過,到目前為止,我一直走這條路,我想知道以這種方式完成手頭的任務是否很有趣。