導入具有包裝單元格內容的Excel工作表你好
儘管我知道最好避免在Excel for Analysis中使用包裝單元格,但是我有一位擁有此類數據的客戶。使用Excel導入嚮導進行導入也將導入已包裝的單元格,儘管您必須跨較大的行才能看到所有條目。默認情況下,這些列是字符列和標稱列。但是不能用於分析。想像一下,第一列在一個單元格中有多個國家(DE,US,ES),第二列在一個單元格中具有相關的數值(例如,分數為10、15、7)。這意味著德國的得分為10,美國的得分為15,ES為7。
如何處理這類數據?有沒有辦法將其導入到分隔行中?
(這只是數據的簡化版本,您可以考慮其他變量和分組變量,例如研究/項目等,其中這些單元格之一屬於每個研究之一。)
到目前為止,我已經嘗試過:
要在JMP中使用此數據,可以使用多重響應變量,並將屬性“多重響應”設置為定界符“”,因為換行沒有定界符為“,”或“;”。到目前為止,一切都很好,但是現在通過頻率而不是數值來分析數據。因此無法使用一堆分析方法。
堆棧,拆分和其他表操作對我不起作用,因為它們沒有考慮多個響應列,而是將整個條目作為一個值。擴展到列我也沒有成功,儘管我可能找不到竅門。但是,這似乎已經涉及許多步驟才能找到一個好的解決方案,但是任何解決方案都比沒有解決方案要好:)
我想最好的解決方案是已經在Excel中提供了不同結構/格式的數據。或者您還有其他建議嗎?
附加了excel文件和腳本,以導入並將建模類型更改為“多個響應”。
謝謝,
馬丁
回复:導入帶有包裝單元格內容的Excel工作表嗨,布雷迪,非常感謝!我強烈建議客戶更改源代碼中的格式,因為使用JSL可以處理此格式,但是如果有更多列需要另外處理,則可能會變得更加麻煩。
對我來說,具有連續和多個系列的堆棧選項現在也更加清楚。
謝謝,
馬丁
回复:導入帶有包裝單元格內容的Excel工作表由於包裝,此數據確實很難看。看看這是否有效;它似乎為我工作。
主要思想是:
折疊空白,用逗號替換換行符,將文本替換為列,並創建多個連續的堆棧。
此外,還有一些清除操作,例如列刪除,空行刪除和類型轉換。
Names Default To Here(1);
dt = Open(pickfile(),
Worksheets( "Sheet1" ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
)
);
dt << new column("C2", formula(collapse whitespace(substitute(:Country, "\!n",","))));
dt << new column("D2", formula(collapse whitespace(substitute(:Data, "\!n",","))));
dt << select columns({"C2", "D2"});
dt << text to columns(delimiter(","));
dt << Delete Columns;
dt << Delete Columns (1,2);
collist = dt << get column names(string);
colExpr = insert(expr(columns()), colList);
stackExpr = Expr(
dtStack = dt << Stack(
_CCC_,
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Number of Series( 2 ),
Contiguous
)
);
substituteInto(stackExpr, expr(_CCC_), nameexpr(colExpr));
stackExpr;
dtStack << delete Columns (1,3);
dtStack << select where (:Data == "") << delete rows();
close(dt, nosave);
column(dtStack,1)<<SET name=""></SET>回复:導入帶有包裝單元格內容的Excel工作表嗯,是個好主意,但是我不能使用它,因為它要求將兩列堆疊在一起,但是我只能選擇其中一列。附上示例表,可能我用錯了。
更正,如果我將表中的定界符更改為“,”,則可以使用它
For Each Row(
new1 = Substitute( Column( 1 )[], "\!n", "," );
Column( 1 )[] = new1;
);
For Each Row(
new2 = Substitute( Column( 2 )[], "\!n", "," );
Column( 2 )[] = new2;
);
但是,它仍然看起來不像我期望的茶几那樣,就像這樣:
|
ID
|
國家
|
數據
|
|
1個
|
德
|
10
|
|
1個
|
精氨酸
|
15
|
|
1個
|
美國
|
13
|
| 2 |
德 |
10 |
回复:導入帶有包裝單元格內容的Excel工作表您提出的“多響應列”構想使您處於使用的絕佳位置 @brady_brady 的數據表工具加載項。 那裡有一個實用程序,可讓您在“多個響應”和“堆疊”之間來迴轉換。 將其堆疊後,您就可以將建模和數據類型更改為適合數據的類型。
最好,
中號