【问题标题】:How to format input for SAS's MONYY format如何格式化 SAS 的 MONYY 格式的输入
【发布时间】:2016-08-08 18:25:40
【问题描述】:

我目前有一个日期格式为“FY15 FEB”的数据集。在尝试格式化此变量以用于 SAS 的时间和日期时,我做了以下操作:

data temp;
    set pre_temp;
    yr = substr(fiscal,3,2);
    month = substr(fiscal,6,length(fiscal));
    mmmyy = month||yr;
    input mmmyy MONYY5.;
    datalines;
run;

所以,我有代表年份和相应月份的字符串。但是,运行此代码会给我错误“未找到或无法加载信息 $MONYY”。对这个错误做一些背景知识告诉我,它与传递信息类型错误的值有关;为了得到正确的输出,我应该改变什么?

*编辑:我在 SAS 支持页面上看到“MONYYw。期望 SAS 日期值作为输入;”的格式。鉴于此,我如何从字符串转换为在此之前的其他日期格式?

【问题讨论】:

    标签: date formatting sas


    【解决方案1】:

    当您看到 $ 时,它表示字符值。在这种情况下,您为 SAS 提供一个字符值并为其提供数字格式。 SAS 为您插入 $,但不存在这种格式。

    我将忽略 datalines 语句,因为我不确定它为什么存在(尽管我确实注意到没有 set 语句)。将程序更改为:

    data temp;
        yr = substr(fiscal,3,2);
        month = substr(fiscal,6,length(fiscal));
        pre_mmmyy = strip(month)||strip(yr);
        mmmyy=input(pre_mmmyy,MONYY5.);
    run;
    

    您还可以从 substring 函数中删除“length(fiscal))”。 substring 函数的第三个参数是可选的,默认情况下将转到字符串的末尾。

    【讨论】:

    • 谢谢!我对 SAS 相当陌生,所以我认为 datalines 语句在那里,因为我误解了输入语句应该如何工作。我的实际代码也确实包含一个 set 语句,我只是从问题中省略了它。将其重新添加以避免混淆。
    • lengthn()substrn() 应始终使用,而不是 length()substr()。他们更好地处理边缘情况,在lengthn() 的情况下,它返回0 而不是1 用于与其他所有语言一致的空字符串。
    • 作为后续,我是否正确理解问题是我没有删除导致问题的前导/尾随空格的参数,或者是 input() 函数?跨度>
    • 两者兼而有之。在你的系统上测试它应该也会告诉你
    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多