更改我的工作创建的每个数据集的所有者和权限

时间:2019-04-03 22:43:43

标签: permissions sas dataset pipe chown

我需要更改作业生成的每个数据集的所有者和权限。我需要将其包括在我的后期处理过程中。我可以在SAS代码中使用X或管道的chown命令来更改最新创建的数据集的权限。建议方法,以获取作业中创建的所有永久数据集的列表。

2 个答案:

答案 0 :(得分:1)

没有SAS开/关选项“新闻记录”功能可以自动识别创建数据集的跑步者/工作。安装在大型钢铁(大型机)操作系统或OpenVMS中的SAS可能会由操作系统自动完成。

您知道创建新数据集时使用的<path>的libname吗?

一种方法依赖于find选项-newer

  

-较新的文件
                文件比文件最近被修改。如果文件是符号链接,并且-H选项或-L选项有效,则始终使用它指向的文件的修改时间。

所以你想

  • 开始工作-创建标记文件
  • 工作结束-查找比标记文件新的文件,并对它们执行chown命令

示例:

libname joblib '~/myjobs/sasdata';

* create marker file;
%sysexec touch /tmp/job-start.tag

* sas code;

* chown and chmod each newer file;
%sysexec find ~/myjobs/sasdata -type f -newer /tmp/job-start.tag -exec chmod 755 {} \%str(;);
%sysexec find ~/myjobs/sasdata -type f -newer /tmp/job-start.tag -exec chown newower {} \%str(;);

从作业内部标记SAS数据集的替代方法

想法是将数据集与其他作业区分开来,对其进行标记,标记或标记

方法1. 工作创建独立的数据集集:

为每次运行创建一个新的Job-unique文件夹:

  • 在源代码中使用常见的libref,例如JOB,但要使其指向新文件夹
  • 运行作业,创建新的数据集。
  • 执行职位调整
  • 将新数据集移动到其永久存储位置PERM

方法2。工作来源取决于PERM中的数据集,并且无法更改

使用库路径串联:

  • 在作业启动前更改libname
    libname PERM ("<path-to-new-job-unique-folder">, "<path to actual PERM>");
  • 新数据集将在串联的第一个路径中创建。
  • 如前所述,工作后过程数据集

方法3. 使用宏变量标记作业中的每个数据集

  • 从以下位置更改工作代码
    DATA xyz; …

    %let JOB_TIMESTAMP=%sysfunc(datetime()); %* this is a job 'tag' for job-unique identification; %let JOB_LABEL=(label="JOBID:&JOB_LABEL"); DATA xyz &JOB_LABEL; …
  • 发布作业,使用PROC CONTENTS或SQL DICTIONARY.TABLES来确定标签中带有&JOB_TIMESTAMP的数据集。

方法4. 作业在SAS服务器上运行,标签无法更改

  • 更新JOB源代码,以便作业创建的每个数据集都获得一个对应的元数据注释,其中包含&JOB_TIMESTAMP。
  • 发布作业,扫描&JOB_TIMESTAMP的元数据注释,并调整匹配的内容。

方法5. 为作业创建的每个数据集创建AUDIT数据集

  • 搜索帮助以了解“了解审计跟踪”
  • 职位发布后在审核表中搜索职位标签

其他方式

  • 为工作创建自己的跟踪表
  • 必须更改JOB源,并且宏可以帮助实现一致性: %macro jobtracker(data=, id=); … insert into perm.jobtracker values ("&data", "&id") … %mend; … %jobtracker(data=analysis1, id=&JOB_TIMESTAMP) %* manually track each table; data analysis1; …
  • PERM.JOBTRACKER&JOB_TIMESTAMP发布作业,处理数据集。

如果以上方法都不适合您,请在问题中添加更多信息:

  • 职位如何开展?
  • 开始时距离有多近?
  • 有多少作业并行运行?
  • 工作是否可以在创建或依赖新数据集时发生冲突?
  • 您是否完全控制所应用的源代码和数据集选项?

答案 1 :(得分:0)

当您说“永久数据集”时,必须表示这些数据集存储在一个或多个位置。为什么不只使用library(data.table) setDT(df)[, Change := Count - shift(Count, fill = last(Count), type = 'lead'), Name][] # Name Date Count Change #1: Bob 2019-03-03 253 0 #2: Bob 2019-03-03 253 1 #3: Bob 2019-03-02 252 1 #4: Bob 2019-03-01 251 0 #5: Tim 2019-03-04 257 0 #6: Tim 2019-03-04 257 1 #7: Tim 2019-03-04 256 2 #8: Tim 2019-03-03 254 0 来获得列表?