簡體   English   中英

SAS - 如何讀取日期數據?

[英]SAS - how can I read in date data?

我正在嘗試以日期格式讀取一些數據,但解決方案卻讓我望而卻步。 以下是我使用我能設計的最簡單的獨立示例進行的四次嘗試。 (並且該網站讓我提高了文本與代碼的比率,以便發布此內容,因此請忽略這句話)。

*編輯 - 我的例子太簡單了。 我的變量中有空格,所以我確實需要指定位置(原始答案說完全忽略位置)。 下面的解決方案有效,但日期變量不是日期。

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;

無需指定長度。 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

我的一個朋友建議這樣做,但必須根據變量是否為日期來顯着切換語法似乎很奇怪。

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;

SAS 提供了許多不同的數據輸入方式,這取決於您想要做什么。

列 input ,這是您開始的內容,適用於以下情況:

要使用列輸入讀取,數據值必須具有以下屬性:

  • 出現在所有輸入數據記錄的相同列中
  • 由標准數字形式或字符形式組成

您的數據在visit_date列中不符合此visit_date 所以,你需要使用別的東西。

當您需要以下功能時,適合使用格式化輸入

對於格式化輸入,信息跟在變量名之后,並定義 SAS 如何讀取該變量的值。 信息提供輸入值的數據類型和字段寬度。 Informats 還讀取以非標准形式存儲的數據,例如壓縮十進制或包含特殊字符(例如逗號)的數字。

您的visit_date列符合此要求,因為您有特定的信息mmddyy10. ( mmddyy10. ) 可用於將數據讀入日期格式。

在某些情況下, 列表輸入也可以工作,尤其是在修改后的列表格式中,但在您的示例中,它當然不是由於名稱中的空格。 以下是您可能想要使用它的時間:

列表輸入要求您按照字段在輸入數據記錄中出現的相同順序在 INPUT 語句中指定變量名稱。 SAS 掃描數據行以定位下一個值,但忽略額外的中間空白。 列表輸入不要求數據位於特定列中。 但是,除非更改了值之間的分隔符,否則您必須至少用一個空格將每個值與下一個值分開。 默認情況下,數據值的分隔符是一個空格或輸入記錄的末尾。 列表輸入不會跳過任何數據值來讀取后續值,但它可以忽略數據記錄中給定點之后的所有值。 但是,指針控件使您可以更改讀取數據值的順序。

(為了完整起見,還有Named input ,盡管這種情況很少見,而且在這里沒有幫助。)

您可以混合使用 Column 和 Formatted 輸入,但您不想混合使用 List 輸入,因為它沒有完全相同的指針控制概念,因此很容易以您不想要的方式結束。 通常,您應該使用適合您的數據的輸入類型 - 如果您的數據都是文本/常規數字,請使用列輸入,如果您的數據具有特定格式,請使用格式化輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM