我需要更改作业生成的每个数据集的所有者和权限。我需要将其包括在我的后期处理过程中。我可以在SAS代码中使用X或管道的chown命令来更改最新创建的数据集的权限。建议方法,以获取作业中创建的所有永久数据集的列表。
答案 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文件夹:
JOB
,但要使其指向新文件夹PERM
方法2。工作来源取决于PERM
中的数据集,并且无法更改:
使用库路径串联:
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服务器上运行,标签无法更改
方法5. 为作业创建的每个数据集创建AUDIT数据集
其他方式
%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
来获得列表?