了解信息和格式之间的区别& do_EFIERR_如何工作

时间:2016-03-13 18:39:49

标签: sas

457 data WORK.CC_2 ;
458 %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
459 infile 'C:\Documents and Settings\DASC\Desktop\SUGI05_CC_1.csv' delimiter = ','
MISSOVER
459! DSD lrecl=32767 firstobs=2 ;
460 informat q_1 $5. ;
461 informat q2_6 best32. ;
462 informat q7_9 $5. ;
463 informat q8_1 best32. ;
464 informat q8_3 $5. ;
475 format q_1 $5. ;
476 format q2_6 best12. ;
477 format q7_9 $5. ;
478 format q8_1 best12. ;
479 format q8_3 $5. ;
489 format check_77 $5. ;
490 input
491 q_1 $
492 q2_6
493 q7_9 $
494 q8_1
495 q8_3 $
506 ;
507 if _ERROR_ then call symput('_EFIERR_',1); /* set ERROR detection macro        variable */
508 run;

有人可以帮助我了解信息和格式如何在这里工作?另外,我不确定我是否理解宏 EFIRR

3 个答案:

答案 0 :(得分:1)

INFORMAT描述了如何在文本文件中显示数据。

FORMAT描述了您在查看数据时希望SAS如何呈现数据。请记住,格式不会更改基础数据,只是如何打印输入到灰质计算机中。

这似乎来自PROC IMPORT。它使用该宏来检测读取文件时是否发生错误。如果有,那么它会为您提供超级有用的错误消息"发生错误" (或类似的东西)。

您可以从程序中删除这些_EFIERR_行而不会产生副作用。

答案 1 :(得分:0)

Informats是现有文件

中列的数据类型

Formats是SAS为了简化数据而定义的数据类型。

它看起来是来自SAS日志文件的复制代码, EFIERR 表示文件中存在的任何读取错误。它是从Import Wizard自动调用的宏。基本上EFIERR将检查数据是否有任何缺失元素,然后重新检查代码是否有Missover语句来帮助丢失元素。它还将检查标题名称,数据格式,数据顺序等,并将作为使用导入向导导入的任何数据的质量指标。

答案 2 :(得分:0)

我的答案与其他人的说法略有不同。

代码正在创建一个宏变量_EFIERR_,它初始化为0,如果数据步骤中有任何错误,则设置为1.

INFORMAT告诉SAS如何读取文件中的文本字符并将其转换为SAS存储的值。因此,$5.表示只存储读取的字符,而BEST32.表示将文本转换为数字。

FORMAT告诉SAS如何在将值打印回字符时显示值。因此$5.表示要使用5个字符进行打印。 BEST12.表示使用最佳格式显示12个字符的数字。所以小于12个字符的整数只是正常写入。如果打印数字需要超过12个字符,那么它将使用科学记数法打印。

这看起来是PROC IMPORT生成的代码。我不是PROC IMPORT如何生成数据步骤代码的粉丝 1)代码没有明确定义变量类型和长度。相反,它取决于INFORMAT语句的副作用是引用变量的第一个位置。所以Q_1被定义为长度为5的字符,因为它使用$5.信息。

2)它将格式附加到字符变量。这没有任何效果,因为长度为5的字符变量将在5个空格中打印,无论您是否附加了格式。但是,当组合来自多个来源的数据时,它可能会导致问题。如果您阅读了两个CSV文件,其中一个文件的Q_1长度为8美元,而第二个文件的Q_1长度为5美元。如果按顺序将它们组合在一起,则新变量的长度为$ 8,但格式为$5.。因此,当您打印值时,它们可能会被截断。

3)$语句中不需要INPUT,因为程序已经通过INFORMAT语句定义了变量。

相关问题