SAS元数据数据步骤功能

我想知道当我们尝试通过数据步骤函数读取元数据时,为什么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作为输出或输出是什么?

谢谢!

最佳答案 我同意 – 这里的文件可以改进!

第一个示例非常清楚 – 提供URI(元数据查询)并返回用于进一步逻辑/查询的类型和Id.

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

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

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

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

点赞