如何将存储在宏变量中的日期转换为sas格式

时间:2016-04-05 06:38:37

标签: sas

我有一个宏值%let date = '31DEC2015'd;(以sas格式表格中的1451550706498)

如何将其转换为SAS格式以在我的桌子上应用过滤器,我该怎么办?谢谢!

1 个答案:

答案 0 :(得分:3)

无需转换。如果你的sas数据集中有一个日期列,你可以通过这种方式使用你的宏变量来过滤它:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>Demo</display-name>
    <servlet>
        <servlet-name>context</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>context</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/context-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>
</web-app>

虽然你提到的数字不能合理地提及你提到的日期 - 31DEC2015在SAS中的数值为data filtered; set unfiltered; where dateCol <= &date; run; 自1960年1月1日以来经过的天数)。所以你的数据有些奇怪......即使有一个日期时间(自1960年1月1日以来经过的秒数),这个数字大约为20,453,远不及你的数值。你是怎么得到这么大的数字的?

修改

不是100%肯定我完全明白你在问什么,但这里是你在评论中提到的解决方案的替代方案,这将给你一个“真正的”SAS日期,即仍然是数字,但是您可以应用任何SAS日期格式:

1,767,139,200 secs.

结果:

data test;
  format newDate date9.;
  oldDateTime = 1451550706498;
  oldDate = datepart(oldDateTime/1000);
  newDate = intnx("YEAR",oldDate,-10,"SAME");
  put _ALL_;
run;

(我看到你的结果与你的结果存在1天的差异。)

如果您需要根据此值进行过滤(通过宏变量),您始终可以使用CALL SYMPUT进行分配。