【问题标题】:Custom Format in SASSAS 中的自定义格式
【发布时间】:2017-07-25 09:50:50
【问题描述】:

我希望在 SAS 中创建一种自定义格式,它将诸如 NA、EU 和 AF 之类的大陆代码转换为北美、欧洲和非洲。一切都已设置好,我在 .csv 文件中读取了包含国家及其大陆代码的 SAS,我可以打印一张表格,显示每个国家及其各自的国家代码。现在我只想使用自定义格式将代码转换为大陆名称。到目前为止,我有以下内容(我错过了所有 DATA 步骤,因为它工作正常):

LIBNAME newlib 'C:\Users\C*****\Documents\My WPS Files';

PROC FORMAT lib = newlib;
VALUE $cont
    'AS' = 'Asia'
    'EU' = 'Europe'
    'NA' = 'North America'
    'SA' = 'South America'
    'AF' = 'Africa'
    'OC' = 'Oceania'
    '' = 'Unknown';
 RUN;

 PROC PRINT DATA = newlib.life_ex (OBS = 10) NOOBS;
     TITLE 'Top 10 Life Expectancies in 2010';
     VAR Country YR2010 Continent;
     FORMAT Continent$cont.;
 RUN;

如果我运行它,我会收到以下错误。

2947        FORMAT Continent$cont.;
                       ^
ERROR: Format $cont was not found or could not be loaded

我不明白这一点,因为我正在执行我之前在其他 SAS 程序中使用过的确切步骤,这些程序运行良好,但这个程序不会执行。如果我删除 FORMAT Continent$cont.行,程序运行完美,没有错误,但显然我的代码没有转换。有什么帮助吗?

【问题讨论】:

    标签: sas


    【解决方案1】:

    试试:

    options insert=(fmtsearch=newlib);
    

    此代码告诉 SAS 在哪里可以找到格式(因为它没有存储在默认的 WORK 库中)。

    它需要在使用格式之前执行,以便 SAS 知道在哪里搜索它。所以在这种情况下,在proc print 步骤之前。

    如果上述选项不起作用(应该)尝试:

    options fmtsearch=(newlib work);
    

    这种方法的问题是您必须识别并构建整个搜索路径(而不是在开始时插入新路径)

    【讨论】:

    • 我认为通过在 PROC PRINT 步骤中提及库,它会像我在之前的程序中所做的那样效仿。我不确定我需要把这个 OPTIONS 命令放在哪里。
    • 我更新了答案,它需要在库定义之后和调用格式的地方之前。它不自动可用的原因是您使用proc format 中的lib= 选项将格式保存为特定库中的永久格式。该库不会自动添加到格式搜索路径中(考虑可扩展性 - 如果您有数百万个格式定义,您不希望它们一直都被定义和可搜索)
    • 如果它以前有效,那么您的搜索路径中肯定有该库。我在 SAS Studio 中对此进行了测试,效果很好..
    • 好的,谢谢你的清晰,我现在明白了。我尝试使用您建议的行并得到以下信息:错误:系统选项“INSERT”未知,错误:系统选项 FMTSEARCH 的值需要括号,错误:在需要名称时找到“)”。我>
    • 我遵循了你的新方法,效果很好,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多