【问题标题】:SAS - how can I read in date data?SAS - 我如何读取日期数据?
【发布时间】:2021-10-13 15:18:34
【问题描述】:

我正在尝试以日期格式读取一些数据,但我无法找到解决方案。这是我使用我可以设计的最简单的独立示例的四个尝试。 (并且该网站正在让我提高我的文本与代码的比率以便发布,所以请忽略这句话)。

*EDIT - 我的例子太简单了。我的变量中有空格,所以我确实需要指定位置(原始答案说完全忽略位置)。以下解决方案有效,但日期变量不是日期。

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;

【问题讨论】:

标签: date sas format informat


【解决方案1】:

无需指定长度。 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

【讨论】:

  • 其实我的问题过于简单化了。实际上,我的变量值本身包含空格,因此有必要指定位置。试图找到一种表达方式。
【解决方案2】:

我的一个朋友建议这样做,但根据变量是否为日期来显着切换语法似乎很奇怪。

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;

【讨论】:

  • 你的代码有点不对劲(24 不是 25),但你没有切换...
  • 如果您不想切换,请使用 FORMATTED 模式全部阅读。 input name $12. visit_date mmddyy10. +1 group $1.;
  • 如果我从列输出开始,我以后不得不放弃它,是吗?这似乎是反对使用它的一个很好的论据。
【解决方案3】:

SAS 提供了许多不同的数据输入方式,具体取决于您想要做什么。

Column input,这是你开始的,当这是真的时是合适的:

要使用列输入读取,数据值必须具有以下属性:

  • 出现在所有输入数据记录的相同列中
  • 由标准数字形式或字符形式组成

visit_date 列中的数据不符合此条件。所以,你需要使用别的东西。

Formatted input 适合在您需要这些功能时使用:

对于格式化输入,informat 跟随变量名称并定义 SAS 如何读取此变量的值。信息提供输入值的数据类型和字段宽度。 Informats 还读取以非标准格式存储的数据,例如压缩十进制或包含逗号等特殊字符的数字。

您的 visit_date 列符合此要求,因为您有一个特定的信息 (mmddyy10.),您想使用它来将数据读入日期格式。

List input 在某些情况下也可以工作,尤其是在修改后的列表格式中,尽管在您的示例中当然不会因为名称中的空格。以下是您可能想要使用它的时间:

列表输入要求您在 INPUT 语句中指定变量名称,其顺序与字段在输入数据记录中出现的顺序相同。 SAS 扫描数据线以定位下一个值,但忽略其他中间空白。列表输入不要求数据位于特定列中。但是,除非更改了值之间的分隔符,否则您必须将每个值与下一个值隔开至少一个空格。默认情况下,数据值的分隔符是一个空格或输入记录的结尾。列表输入不会跳过任何数据值来读取后续值,但它可以忽略数据记录中给定点之后的所有值。但是,指针控件使您能够更改读取数据值的顺序。

(为了完整起见,还有Named input,虽然这种情况比较少见,并且在这里没有帮助。)

您可以混合使用 Column 和 Formatted 输入,但您不想混合 List 输入,因为它没有完全相同的指针控制概念,因此很容易得到您不想要的东西。一般来说,您应该使用适合您的数据的输入类型 - 如果您的数据都是文本/常规数字,则使用列输入,如果您的数据具有特定格式,则使用格式化输入。

【讨论】:

  • 通过发布的示例,您可以使用& 修饰符以列表模式读取第一个变量,因为最长的嵌入空格是一个字符,并且名称之后和日期之前至少有两个空格在每一行。
  • 当然,但我试图将其保持在适合阅读问题的人的水平。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多