【问题标题】:SAS - Exporting same dataset to multiple excel filesSAS - 将相同的数据集导出到多个 Excel 文件
【发布时间】:2020-05-23 01:08:13
【问题描述】:

我想根据某个变量将数据集导出到多个excel文件中:

proc sql;
    create table try as
    select distinct make from sashelp.cars;
quit;

proc sql;
    create table try2 as
    select count(make) as aaa from sashelp.cars;
quit;

data _null_;
    set try;
    by make;
    call symputx ('make',compress(make,' .'),'g');
run;

data _null_;
    set try2;
    call symputx('n',aaa);
run;

%macro a;
    %do i=1 %to &n;
        %let var= %scan(&make,&i,"@");
        proc export data=testing (where=(make="&make."))
                outfile="C:\Users\&make..xlsx"
                dbms=xlsx replace;
            sheet="&make." ;
        run;
    %end;
%mend ;
%a;

我的目标是获取所有38个以maker名称为文件名的excel文件。

但是,我在这里只能找到最后一个制造商名称的文件。

您能指出我在这里遗漏的地方吗?非常感谢!!

【问题讨论】:

    标签: sas


    【解决方案1】:

    您的第一个错误是您计算了具有品牌的汽车的数量,而您应该计算汽车的不同品牌。现在我也借机给你解释一下sql的into子句,这样你就不需要那个数据步骤了

    proc sql;
        select count(distinct make) 
        into :make_count
        from sashelp.cars;
    quit;
    

    您从您的品牌名称中删除空格和指向,但您最好一次删除所有非字母字符,compress(make, '', 'ka'),其中选项k 代表保留,a 代表字母。

    您的主要错误是您认为您在宏变量make 中附加了所有make 名称,但您实际上一次又一次地覆盖make:首先您将“Cadillac”写入它,然后是“雪佛兰”,当你使用它时,它变成了“沃尔沃”。 我可以向您解释如何更正您的数据步,但相反,我将向您学习其中的一个选项:

    proc sql;
        select distinct compress(make, '', 'ka')` 
        into :make_list separated by ' '
        from sashelp.cars;
    quit;
    

    剩下的很简单。

    %macro export_by_make;
        %do make_nr=1 %to &make_count;
            %let make= %scan(&make_list, &make_nr);
            proc export data=sashelp.cars (where=(compress(make, '', 'ka')`="&make."))
                    outfile="C:\Users\&make..xlsx"
                    dbms=xlsx replace;
                sheet="&make." ;
            run;
        %end;
    %mend;
    %export_by_make;
    

    请注意,您不需要为 %scan 函数指定分隔符,因为我们用空格分隔,但无论如何,如果您这样做,因为您使用宏版本的扫描,您不需要引号围绕它。

    【讨论】:

    • 您可以不使用 %SCAN() 的默认定界符的原因是使用默认定界符之一(空白)和消除任何其他默认定界符的组合,@ 987654330@,通过使用compress()函数将列表生成到宏变量中。
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2016-02-28
    • 2023-03-23
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多