Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date SAS INPUT语句中信息符前面的冒号_Date_Input_Sas - Fatal编程技术网

Date SAS INPUT语句中信息符前面的冒号

Date SAS INPUT语句中信息符前面的冒号,date,input,sas,Date,Input,Sas,我想知道,如果SAS通过数据步骤中的输入语句只读取日期变量,那么似乎有必要在每个信息名前写一个冒号,而如果变量列表以另一种类型的变量(例如字符变量)开头,则在信息名前不需要冒号。 为了说明我的问题,有两个小程序(见下文)。第一个生成日期的无效数据(只要我不在mmddyy10.之前写冒号,以获取输入日期:mmddyy10.),而第二个则不生成。 奇怪,不是吗?对此可能有一些解释,但尽管搜索了SAS支持文档和论坛,我还是无法发现它可能是什么。欢迎任何帮助! 不管怎么说,如果我早一点明白问题的关键所在

我想知道,如果SAS通过数据步骤中的输入语句只读取日期变量,那么似乎有必要在每个信息名前写一个冒号,而如果变量列表以另一种类型的变量(例如字符变量)开头,则在信息名前不需要冒号。 为了说明我的问题,有两个小程序(见下文)。第一个生成日期的无效数据(只要我不在mmddyy10.之前写冒号,以获取输入日期:mmddyy10.),而第二个则不生成。 奇怪,不是吗?对此可能有一些解释,但尽管搜索了SAS支持文档和论坛,我还是无法发现它可能是什么。欢迎任何帮助! 不管怎么说,如果我早一点明白问题的关键所在,我就省下了几个小时来解决这个问题

* program #1;
DATA _NULL_;
    INPUT date mmddyy10.;
    DATALINES;
    09/14/2012
    09/15/2012 
    ;
  RUN;
  PROC PRINT; RUN;

* program #2;
  DATA _NULL_;
     INPUT id $ date mmddyy10.;
   DATALINES;
    A 09/14/2012
    B 09/15/2012 
   ;
  RUN;

在您的第一个程序中,您告诉SAS读取前10个字符作为日期。但前4个字符都是空格。因此,您要求它尝试将
'09/14/'
转换为日期。我建议总是从第一列开始键入DATALINES(aka CARDS)语句,以防止编辑器的自动缩进功能导致数据行也缩进

内联信息规范前面的冒号(
)告诉SAS使用列表模式输入,而不是格式化输入。使用格式化输入,SAS读取格式指定的字符数。在列表模式下,SAS根据当前分隔符和dsd设置读取行中的下一个字段。信息所用的宽度将调整为与行中下一个字段的实际宽度相匹配

例如:

data test;
  length name1-name3 $30 ;
  input @1 name1
        @1 name2 $5.
        @1 name3 :$5. 
  ;
cards;
Elizabeth
;
结果:

Obs      name1      name2      name3

 1     Elizabeth    Eliza    Elizabeth

你是说冒号而不是列吗?像
是,冒号,不是列。很抱歉如果答案标题的轻微正式修改不是不可能或禁止的,我建议(授权在Stackoverflow上编辑内容的人员)至少在上述主题行中将“冒号”替换为“列”,以便用户后续搜索更高效。我认为,修改答案文本中三个错误出现的“column”而不是“colon”并不重要,这会使Tom的评论变得奇怪。提前感谢您的编辑,并为我的输入错误表示歉意。感谢您考虑了我在上面提出的关于编辑我的问题的建议。我是否应该将您示例中的输入语句解释为修改输入语句中输入类型的可能性(此处,从格式化输入移动到列表输入)?是的。NAME1是使用普通列表模式输入的,没有添加内联信息;NAME2是使用格式化模式输入的;NAME3是列表模式,但有内联信息。@只是为了让它们都在同一个地方开始读取,这样我们就可以比较读取相同输入流的效果。谢谢!到目前为止,我还没有意识到
name3:$5.
属于列表模式,而相同的代码(没有冒号)使用格式化模式。你能解释一下LENGTH语句在这个精确上下文中的作用吗?事实上,如果我省略这条语句,我会得到name1的无效数据消息。而且,如果我将LENGTH语句限制为name1,结果与您的结果类似,只是name3的值随后被截断为Elizabeth(即Eliza)的前五个字符。LENGTH语句将定义变量的类型和存储长度。如果在引用变量之前未定义变量,则SAS必须根据您首次使用变量的方式猜测如何定义变量。如果没有任何指导,变量将变为数字,这就是为什么NAME1丢失的原因。如果第一个位置看到与格式或信息关联的变量,它将匹配类型,并根据格式/信息宽度猜测长度。