我正在嘗試以日期格式讀取一些資料,但解決方案卻讓我望而卻步。以下是我使用我能設計的最簡單的獨立示例進行的四次嘗試。(并且該網站讓我提高了文本與代碼的比率,以便發布此內容,因此請忽略這句話)。
*編輯 - 我的例子太簡單了。我的變數中有空格,所以我確實需要指定位置(原始答案說完全忽略位置)。下面的解決方案有效,但日期變數不是日期。
data clinical;
input
name $ 1-13
visit_date $ 14-23
group $ 25
;
datalines;
John Turner 03/12/1998 D
Mary Jones 04/15/2008 P
Joe Sims 11/30/2009 J
;
run;
uj5u.com熱心網友回復:
無需指定長度。datalines已經假定以空格分隔的值。指定資訊的一種簡單方法是:在每個輸入變數之后使用一個。
data clinical;
input ID$ visit_date:mmddyy10. group$;
format visit_date mmddyy10.; * Make the date look human-readable;
datalines;
01 03/12/1998 D
02 04/15/2008 P
03 11/30/2009 J
;
run;
輸出:
ID visit_date group
01 03/12/1998 D
02 04/15/2008 P
03 11/30/2009 J
uj5u.com熱心網友回復:
我的一個朋友建議這樣做,但必須根據變數是否為日期來顯著切換語法似乎很奇怪。
data clinical;
input
name $ 1-12
@13 visit_date MMDDYY10.
group $ 25 ;
datalines;
John Turner 03/12/1998 D
Mary Jones 04/15/2008 P
Joe Sims 11/30/2009 J
;
run;
uj5u.com熱心網友回復:
SAS 提供了許多不同的資料輸入方式,這取決于您想要做什么。
列 input,這是您開始的內容,適用于以下情況:
要使用列輸入讀取,資料值必須具有以下屬性:
- 出現在所有輸入資料記錄的相同列中
- 由標準數字形式或字符形式組成
您的資料在visit_date列中不符合此要求。所以,你需要使用別的東西。
當您需要以下功能時,適合使用格式化輸入:
對于格式化輸入,資訊跟在變數名之后,并定義 SAS 如何讀取該變數的值。資訊提供輸入值的資料型別和欄位寬度。Informats 還讀取以非標準形式存盤的資料,例如壓縮十進制或包含特殊字符(例如逗號)的數字。
您的visit_date列符合此要求,因為您有一個特定的資訊mmddyy10.格式( ),您希望使用它來將資料讀入日期格式。
在某些情況下,串列輸入也可以作業,尤其是在修改后的串列格式中,但在您的示例中,它當然不是由于名稱中的空格。以下是您可能想要使用它的時間:
串列輸入要求您按照欄位在輸入資料記錄中出現的相同順序在 INPUT 陳述句中指定變數名稱。SAS 掃描資料行以定位下一個值,但忽略額外的中間空白。串列輸入不要求資料位于特定列中。但是,除非更改了值之間的分隔符,否則您必須至少用一個空格將每個值與下一個值分開。默認情況下,資料值的分隔符是一個空格或輸入記錄的末尾。串列輸入不會跳過任何資料值來讀取后續值,但它可以忽略資料記錄中給定點之后的所有值。但是,指標控制元件使您可以更改讀取資料值的順序。
(為了完整起見,還有 Named input,盡管這種情況很少見,而且在這里沒有幫助。)
您可以混合使用 Column 和 Formatted 輸入,但您不想混合使用 List 輸入,因為它沒有完全相同的指標控制概念,因此很容易以您不想要的方式結束。通常,您應該使用適合您的資料的輸入型別 - 如果您的資料都是文本/常規數字,請使用列輸入,如果您的資料具有特定格式,請使用格式化輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/331450.html
