2017-04-01 72 views
2

您如何向某人解釋LENGTH聲明中「字節」的含義?我一直認爲1個字節等於1個字符或1個數字,但似乎並非如此。此外,爲什麼它的語法與FORMAT語句的語法不同?即:SAS LENGTH語句:什麼是字節?

/*FORMAT Statement Syntax*/ 
FORMAT variable_name $8.; 

/*LENGTH Statement*/ 
LENGTH variable_name $ 8 

回答

4

語法不同,因爲它們做不同的事情。語句LENGTH定義變量的類型以及將變量存儲在數據集中需要多少空間。 FORMAT語句定義了要附加到變量的FORMAT,以便SAS在將值寫入日誌或輸出窗口時知道如何變換變量。

在長度語句中的$意味着你要定義一個字符變量。格式語句中的$只是您附加到變量的格式名稱的一部分。可與字符變量一起使用的格式以$開頭,而數字格式不包含。格式需要有一段時間,以便SAS可以將它們與變量名稱區分開來。但是在LENGTH語句中使用的長度是整數,所以不需要週期(儘管如果將它們添加到整數值之後,SAS將忽略它們)。

我看到SAS代碼了很多混亂的地方FORMAT語句作爲如果它的目的是定義變量。這僅適用於SAS,因爲它會猜測如何在數據步驟中第一次出現時定義變量。所以它會使用你附加的格式的細節來猜測你的意思是什麼類型的變量。所以,如果你在一個賦值語句x=2+3第一參考X,則SAS將猜測,X應的數字,並給它的8默認的長度,但如果看到X的第一個地方是在像format x $10.格式的語句,然後它會猜測你想要的使X長度爲10的字符變量與格式的寬度匹配。

至於字符如何表示和存儲這取決於你使用的是什麼編碼。如果你只使用簡單的7位ASCII碼,那麼字符和存儲它們需要多少字節之間存在1-1的關係。但是,如果您使用的是UTF-8,則最多可能需要4個字節來存儲單個字符。

對於數值變量SAS使用IEEE 64位格式,以便用於存儲變量和用於顯示它的格式的寬度的長度之間的關係是複雜得多。最好將所有數字變量定義爲長度8. SAS允許您定義長度小於8個字節的數字變量,但這意味着在將值寫入SAS數據集時,會丟棄這些額外的精度位。當存儲整數時,只要有足夠的位可以存儲所期望的最大數量,就可以在不降低精度的情況下執行此操作。對於浮點值,您將失去精度。