由于区域设置导致差异的原因

时间:2016-12-12 09:25:23

标签: sas

SAS存储过程服务器的一个“功能”是根据客户端的上下文设置区域设置can change。在我的情况下,会话可能是en_gben_us,具体取决于Excel或Chrome是否发送了相同的请求。

这可能会导致同一报告的结果不同,例如使用ANYDTDTE时。风格的信息。快速解决方法是明确设置options locale=xxx;,但为了衡量这一点的重要性,最好理解:

根据会话区域设置,同一程序可以提供不同结果的主要(非装饰)方式是什么?

1 个答案:

答案 0 :(得分:2)

语言环境影响程序的主要方式是字符集/编码和日期/时间默认值。

字符集(或编码)部分由区域设置决定,例如,如果一个区域设置类似于en-us且一个区域为utf8,则会产生巨大差异。 SAS不仅经常最终默认使用会话编码来读取文件(如果它们未在程序或文件头中明确指定),而是SAS在读入SAS数据集更改后如何处理字符。 DBCS编码将为每个字符存储两个字节,而不是一个,如果区域设置为en-us并且您希望utf8,则可能无法处理某些不在两者之间转码的字符。

日期默认值也非常相关。 en-gb可能假设10/8/2015是2015年8月10日,而en-us则认为是2015年10月8日。这是一个很好的理由,当您可以避免使用anydtdte.时, 当然。您可以通过明确设置DATESTYLE system option来避免此问题。您可能在默认输出格式方面也存在一些差异,例如ddmmyy10.中的分隔符或类似内容。

要查看由于区域设置可能产生的差异,请参阅documentation for the LOCALE system option。这提到了四种设置:

  • DATESTYLE
  • DFLANG(类似于DATESTYLE,会影响日期的阅读方式)
  • 编码
  • PAPERSIZE

此外,TRANTAB设置为设置ENCODING

的一部分