SAS元数据数据步骤功能

时间:2017-04-17 02:27:43

标签: sas metadata sas-macro sas-metadata

我想知道当我们尝试通过数据步骤函数读取元数据时,为什么metadata_getnatr函数与metadata_resolve函数一起使用。

例如:在link

中涵盖的代码中

转载于此:

示例1:使用对象URI

data _null_;
    length id $20
       type $256;
    rc=metadata_resolve("omsobj:Machine?@Name='bluedog'",type,id);
    put rc=;
    put id=;
    put type=;
run;

示例2:使用存储库URI

data _null_;
    length id $20
       type $256
       attr $256
       value $256;

    rc=metadata_resolve("omsobj:RepositoryBase?@Name='myrepos'",type,id);

    put rc=;
    put id=;
    put type=;
    n=1;
    rc=1;
    do while(rc>=0);


rc=metadata_getnatr("omsobj:RepositoryBase?@Name='myrepos'",n,attr,value);
        if (rc>=0) then put attr=;
        if (rc>=0) then put value=;
        n=n+1;

    end;
run;
  • 为什么他们使用getnatr函数?
  • metadata_resolve是否将URI作为输出或输出是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我同意 - 这里的文档可以改进!

第一个例子很清楚 - 提供一个URI(元数据查询)并返回用于进一步逻辑/查询的类型和Id。

第二个例子演示了一些边缘情况。它使用REPO namespace(而不是通常的SAS命名空间)来返回表示存储库的对象(例如FOUNDATION)。您可能已经注意到,您不能使用原始metadata_resolve函数中的ID替换URI(您希望该示例可以作为效率函数展示)。根据{{​​3}},RepositoryBase子类继承了它的元数据id,因此这可能表明在不使用URI的情况下无法引用它的原因。

无论如何,要澄清metadata_resolve的用法:

  • 并非强制要求与metadata_getnatr
  • 结合使用
  • 当您想要查找从URI返回的元数据 type 时,它非常有用
  • 当您要在多个查询中使用相同的uri时,它非常有用(因此将其转换为ID更有效率)

SAS会将​​您的查询缓存在同一个元数据函数中,因此除非您要在多个元数据函数中使用相同的URI,否则您不需要使用metadata_resolve