我如何循环在SAS中的数据集中的语句中不同

发布于 2025-01-27 10:03:17 字数 393 浏览 0 评论 0原文

我有多个条件,其中对变量的语句(例如:

where 1<ColA<3;

where 4<ColB<6;

where 2<ColC<6;
.....
where 5<ColN<8;

我想根据一个人逐个语句,例如:

data newds1;
set original;
where 1<ColA<3;
run;

data newds2;
set original;
where 4<ColB<6;
run;

.....

data newdsn;
set original;
where 5<ColN<8;
run;

我该如何在SAS中的循环中执行此操作?

I have multiple conditional where statements for the variables such as:

where 1<ColA<3;

where 4<ColB<6;

where 2<ColC<6;
.....
where 5<ColN<8;

I want to subset each of the datasets based on those where statements one by one like:

data newds1;
set original;
where 1<ColA<3;
run;

data newds2;
set original;
where 4<ColB<6;
run;

.....

data newdsn;
set original;
where 5<ColN<8;
run;

How can I do that in a loop in SAS?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉城 2025-02-03 10:03:18

创建一个宏来为您完成循环。您可以将所有的陈述分开,并循环通过每个语句。

%macro subset(data=, conditions=, out=);
    %let n = %sysfunc(countw(&conditions., |) );

    %do i = 1 %to &n.;
        %let where = %sysfunc(scan(&conditions., &i., |) );

        data &out.&i.;
            set &data.;
            where &where.;
        run;
    %end;
%mend;

%subset(data=original, conditions=1<ColA<3 | 4<ColB<6 | 2<ColC<6, out=newds);

Create a macro to do the loop for you. You can pipe-separate all of your where statements and loop through each one.

%macro subset(data=, conditions=, out=);
    %let n = %sysfunc(countw(&conditions., |) );

    %do i = 1 %to &n.;
        %let where = %sysfunc(scan(&conditions., &i., |) );

        data &out.&i.;
            set &data.;
            where &where.;
        run;
    %end;
%mend;

%subset(data=original, conditions=1<ColA<3 | 4<ColB<6 | 2<ColC<6, out=newds);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文