2016-02-01 34 views
0

我正在處理一個數據集,這個數據集的ID號非常可怕,是一個整數,後面跟着一個13位數的小數。但是,前6-7小數位是零。例如:在Stata或Excel中解析一個十進制爲兩個整數

10.0000000960554 

這讓我很難過。因此,我想將小數點中的ID分解爲兩個整數,放下前導零,並將它們組合爲一個大整數。然而,我發現如何在Excel中執行此操作的所有內容都會保留小數點後十進制數字。對於塔塔,我試圖將數字轉換成字符串,然後我就可以分析它,但塔塔不會讓我,因爲它是一個小數:

encode ScrambledID, generate StringID 

這裏的錯誤:

not possible with numeric variable 
r(107); 

另一個問題是,我不能在Excel中將小數分割,然後乘以1e + 12,因爲它與數值混淆(長篇小說以及它們的派生方式)。

就像我說的,我在Stata或Excel中都做得很好。無論哪種方式,這是讓我瘋狂。

+0

迂迴評論:你需要'generate()'爲合法'encode'。括號是必需的。這不會影響你提到的問題。 –

回答

1

在Excel:

在一個放:

=int(A1) 

在接下來的說:

=--MID(A1,FIND(".",A1)+1,999) 

正如@ Grade'Eh'Bacon說,我用幾個快捷鍵在上面的公式中。開頭的--更改將數字轉換爲數字的文本。它取代了VALUE()函數。

999是一個多餘的數字,因爲它假定被拆分的字符串的長度不超過999個字符。它可以用LEN()函數替換,該函數將返回字符串的實際長度。

所以把兩者結合起來:

=VALUE(MID(A1,FIND(".",A1)+1,LEN(A1)) 

其中A1是多少

enter image description here

+1

考慮使用LEN([String])而不是999,還有VALUE,而不是 - 將文本轉換爲數字,更具說明性 - 即:= VALUE(MID(A1,FIND(「。」,A1) + 1,LEN(A1)) –

+1

@ Grade'Eh'Bacon都可以很好的工作,我傾向於找到最少的按鍵來獲得所需的內容,但是我認爲你的理解更容易理解 –

+0

@Grade 'Eh'Bacon我加了你的建議並給出了答案的解釋。 –

0

你的故事確實令人震驚的位置。

我建議在任何軟件中非常小心。首先,具有小數部分的數字將根據是以4字節還是8字節實數導入,以Stata術語floats或doubles的形式進行顯示。根本的問題是許多小數沒有確切的二進制表示。

從Stata的角度來看,encode對於一個數值變量來說確實不存在問題(並且您的示例也會由於其他原因而失敗)。但理想情況下,您應該首先將標識符作爲字符串導入。否則,您應該嘗試進行轉換,如generate stringID = string(numid, "%16.13f")

. di %21s string(10.0000000960554, "%16.13f") 
    10.0000000960554 

. di %21s string(10.00000009605539, "%16.13f") 
    10.0000000960554 

. di %21s string(10.00000009605544, "%16.13f") 
    10.0000000960554 

. di %21s string(10.00000009605535, "%16.13f") 
    10.0000000960554 
相關問題