SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3270|回复: 13
打印 上一主题 下一主题

请教:如何删除SAS数据集的空记录?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-7-27 09:45:08 | 只看该作者

请教:如何删除SAS数据集的空记录?

如题,整理数据集,如何删除其中的空记录?
谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-7-27 12:28:33 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

if var = . then delete ?

LZ想问的是什么呢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-7-27 14:41:47 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

to karen1234

删除数据集行操作,“if var = . then delete ”应该是删除列
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-7-27 21:42:46 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

[code:3un9xmkt]
data test2;
     set test;
     where var ge 0;
run;
[/code:3un9xmkt]



只选择非空的观测保存,不知道这样服不符合你的要求
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-7-28 15:11:20 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

曾经见过一外国人写的Macro,是用来删除空记录的,当时没看懂,存来存去后来找不到了.
我现在用的笨办法是用函数NMISS()
if nmiss(of x1-x10)=10 then delete;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-7-30 09:28:35 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

to teahon

这样还是从列的角度来删除的吧,最后保存的观测应该是在列var没有缺失的记录,我现在要整个行都是缺失才删除该条记录,不是某一个变量缺失就删除它
谢谢您的回复,继续等待你的答案
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-7-30 09:31:58 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

to hopewell

这个办法虽然“笨”了点但是逻辑上应该是奏效的,不过nmiss()只能统计数值型变量的缺失,对于字符型不适用
ps:如果你找到你“存来存去后来找不到了”的Macro欢迎你随时发上来我们一起研究一下,我会关注这个帖子的

多谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-7-30 09:52:40 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

用删除重复记录的办法proc sort noduprecs……
可以删除空的记录,最终只保存一条空记录

还是差强人意
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2009-8-2 13:17:49 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

是否可以从metadata里读出这个表的所有字段名,通过循环判断所有字段都为空或.就删除?

如何从metadata读表信息不会写,期待高手指点。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2009-8-4 13:56:19 | 只看该作者

Re: 请教:如何删除SAS数据集的空记录?

试试看这个...
[code:f6lsngbu]%macro dltblk(inds=,outds=);
proc contents data=&inds out=out(keep=name type) noprint;
run;
data _null_;
set out end=eof;
call symput ('var'||strip(put(_n_,8.)),name);
call symput ('type'||strip(put(_n_,8.)),type);
if eof then do;
   call symput ('i',_n_);
run;
%put _user_;
data &outds(drop=count);
set &inds; count=0;
%do j=1 %to &i;
if &&type&j=1 then do;
   if &&var&j=. then count+1;
end;
if &&type&j=2 then do;
   if &&var&j="" then count+1;
end;
%end;
if count=&i then delete;
run;
%mend dltblk;
[/code:f6lsngbu]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 21:28 , Processed in 0.298010 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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