检查sas的外部excel数据集中是不是存在一行

Posted

技术标签:

【中文标题】检查sas的外部excel数据集中是不是存在一行【英文标题】:Check if a row exists in an external excel dataset in sas检查sas的外部excel数据集中是否存在一行 【发布时间】:2021-12-28 08:05:58 【问题描述】:

大家早上好,

我是 sas 的新手。我有一个 excel(例如 sales),其中每天插入一行(例如每天的销售额),我想做的是在 sas 中运行一个宏,如果在 excel 中称为 sales,我没有例如,我将前一天的任何记录放在另一个名为 check sales 的表中。

总之,我希望宏对 excel 数据集进行检查,如果没有昨天日期的记录做 x 事情(在另一个表的列中插入 KO),如果有昨天的记录,继续

这是我尝试过的。我想看看在名为“DQ_Diario”的 excel 中是否有昨天的记录

    %macro Macro_existe2; 
        %let myfiledq= /opt/sas/dfg/dfgd/dfgd/fgdgfd/DQ_DIARIO.xlsx;
        %put &myfiledq;
        %IF (%sysfunc(fileexist(&myfiledq))) and &vweek ne &weekfin %then %do;
            %put REVISAR: existe el fichero de &vday. y es una semana entregada;
        %end;
    %end;
    %mend Macro_existe2;
    %Macro_existe2; 

应该注意,函数中缺少 else 部分,但现在我很想知道如何检查 excel 数据集中是否有昨天的记录(昨天我将它定义为宏变量所以与 & 昨天。这将是有效的)

到目前为止,我所做的是它会检查文件是否存在于某个路径中,但我现在需要检查文件中是否存在记录。

我希望我已经解释清楚了,非常感谢每一位阅读这篇文章的人。圣诞快乐

【问题讨论】:

【参考方案1】:

您需要将 XLSX 文件转换为数据集才能检查内容。所以你的宏必须生成 SAS 代码。

您知道要检查的工作簿中工作表的工作表名称吗?如果不是,PROC IMPORT 将只导入第一张表,无论其名称如何。

数据是否为矩形格式,以便轻松转换为数据集?还是您只想转换 KO 列。 KO 是列标题还是 Excel 列引用?如果是这样,您的工作表中真的有那么多列吗?您可以使用 PROC IMPORT 的 RANGE 选项仅导入特定的单元格。

让我们通过假设您要检查上一个日期的列标记为 DATE 来简化示例,因此将转换为名为 DATE 的变量。

%macro check_xlsx_date(filename,mvar=found);
%if not %sysmexist(&mvar) %then %global &mvar;
%let &mvar=0;

%if %sysfunc(fileexist(&filename)) %then %do;
proc import datafile="&filename" dbms=xlsx out=excel_sheet replace ;
run;

proc sql noprint;
  select max( date = (today()-1) ) into :&mvar trimmed
    from excel_sheet
  ;
quit;
%end;
%mend check_xlsx_date;

%check_xlsx_date(/opt/sas/dfg/dfgd/dfgd/fgdgfd/DQ_DIARIO.xlsx);
%put &=found;

【讨论】:

以上是关于检查sas的外部excel数据集中是不是存在一行的主要内容,如果未能解决你的问题,请参考以下文章

急求!!!我用SAS导入数据的时候 老是出现文件不存在的错误 这是为啥呢?

SAS 的导入导出 excel 表格的实现

如何检查MySQL中是不是存在一行? (即检查电子邮件是不是存在于 MySQL 中)

检查所有ID是不是都存在于另一个数据集中[重复]

SRRS如何检查数据集中是不是存在某个值

excel中如何检查一列中的内容是不是包含在另一个文档的一列中。