SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 657|回复: 5
打印 上一主题 下一主题

如何根据特定要求删掉一个dataset?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-5-13 13:30:18 | 只看该作者

如何根据特定要求删掉一个dataset?

data a;
input unid $ g  $ x;
cards;
a g1 12
b g1 5
c g2 68
;
data a;
input  g  $ x;
cards;
g1 12
g1 5
g2 68
;
run;
如果data里有unid这个变量,就保留,如a;
如果data里没有unid 这个变量,那么久删除,如b.
这个该如何做,谢谢!!!
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
沙发
发表于 2011-5-13 13:40:46 | 只看该作者

Re: 如何根据特定要求删掉一个dataset?

[code:2s2lnzt9]data a;
input unid $ g $ x;
cards;
a g1 12
b g1 5
c g2 68
;
data b;
input g $ x;
cards;
g1 12
g1 5
g2 68
;
run;

%macro delset(dset,findvar);
proc contents data=&dset out=temp noprint;
run;

%let delete=Y;
data _null_;
set temp;
if upcase(name)=upcase("&findvar") then call symput ("delete","N");
run;
%if &delete=Y %then %do;
proc datasets lib=work;
delete &dset;
quit;
%put WARNING: &dset is deleted;
%end;
%mend delset;

%delset(a,unid);
%delset(b,unid);[/code:2s2lnzt9]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-5-13 16:29:02 | 只看该作者

Re: 如何根据特定要求删掉一个dataset?

[code:1umale8p]%let libname=work;
%let varname=unid;
data _null_;
    if _n_=1 then call execute("proc datasets lib=&libname nolist; delete ");
    do until(last.memname);
        set sashelp.vcolumn(where=(libname="%upcase(&libname)")) end=last;
        by memname notsorted;
        if upcase(name)="%upcase(&varname)" then do;
            call execute((put(memname,$32.));
            leave;
        end;
    end;
    if last then call execute('; quit;');
run;[/code:1umale8p]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-5-16 13:22:58 | 只看该作者

Re: 如何根据特定要求删掉一个dataset?

楼上2位牛人,多谢了!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-5-19 04:51:17 | 只看该作者

Re: 如何根据特定要求删掉一个dataset?

Another one:

[code:2k3cnk7a]/* Create a macro that returns: */
/*   1 - if a specified variable is present in a given dataset, or */
/*   0 - otherwise */
%macro existsVariable(lib = work, ds =, var =);
  %local dsid check rc;

  %if &lib. = %then %let lib = work;

  %let dsid = %sysfunc(open(&lib..&ds.));
  %let check = %sysfunc(varnum(&dsid., &var.));
  %let rc = %sysfunc(close(&dsid.));

  %if &check. = 0 %then %do;
    0
  %end; %else %do;
    1
  %end;
%mend existsVariable;

/* Create a test dataset that has two variables, var1 and var2. */
data test;
  var1 = 1; var2 = 2; output;
run;

/* Delete the dataset test if it does not contain variable var3. */
proc datasets lib = work nolist;
  %sysfunc(ifc(%existsVariable(ds = test, var = var3) = 0, delete test, ));
quit;
[/code:2k3cnk7a]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-5-24 23:12:48 | 只看该作者

Re: 如何根据特定要求删掉一个dataset?

cloudpan2002, thanks a lot.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 12:54 , Processed in 0.078329 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表