楼主: pengh1005
7189 14

[原创博文] 请教:关于用DELETE语句删除记录后数据集文件大小不变化的问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

43%

还不是VIP/贵宾

-

威望
0
论坛币
203 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
499 点
帖子
91
精华
0
在线时间
17 小时
注册时间
2010-3-29
最后登录
2010-8-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在使用SAS过程中,碰到一个问题请教:
建立了一个永久数据集,在多次使用后,其大小已达到1G以上,
想只删除记录,保留其表结构,使用了DELETE命令,
发现数据集中的记录是删除了,但文件大小没有变化,还是1G以上,
而且在SAS环境下打开这个空表还是要花费从前一样的时间。
问:
1、数据集的大小只增加,不能减小的吗?
2、如何在删除了记录后,数据集文件大小也能变小?

谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:delete let ele del 数据集 记录 而且 如何

回帖推荐

crackman 发表于5楼  查看完整内容

proc sql; create table a like b; quit; data b; set a; run;

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-4-21 09:50:11 |只看作者 |坛友微信交流群
sas sql的delete机制删除记录而不释放表空间,可能是一种空间换效率的机制
想"回收"那些表空间的办法是重建原表一次(说实话,这个办法很傻)

期待高手回答
Let them be hard, but never unjust

使用道具

藤椅
yatming 发表于 2010-4-21 09:50:48 |只看作者 |坛友微信交流群
用proc sql;delete语句表空间不释放。和soporaeternus 讨论过这个问题,具体你用小表实验一下,delete之后,再看contents,会看到删除的观测数是你刚del的记录数。且打开数据集查看,表的sequence也不再连续。
所以delete只是把观测置空,然后空观测不再显示。
如果要减小数据集还是用data步的del,或者用create table except也可以,不过这类方法都是重新生成然后覆盖的原理。而要只仅在原表上操作的话达到减小表空间的话,期待牛人解答。

使用道具

板凳
pengh1005 发表于 2010-4-21 10:11:01 |只看作者 |坛友微信交流群
感谢soporaeternus 和yatming的解答。
重建表是可行的解决办法,我也认为是比较傻的(现在我也只能这么做),呵呵。
感觉上应该有什么机制或命令能压缩或释放空间的。
期待更好的解决办法!

使用道具

报纸
crackman 发表于 2010-4-21 11:43:03 |只看作者 |坛友微信交流群
proc sql;
create table a like b;
quit;
data b;
set a;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

地板
pengh1005 发表于 2010-4-21 16:28:25 |只看作者 |坛友微信交流群
crackman 发表于 2010-4-21 11:43
proc sql;
create table a like b;
quit;
data b;
set a;
run;
谢谢。这是代码实现的方法。
不知有没有命令来实现??

使用道具

7
horace_chen 发表于 2010-4-21 17:45:22 |只看作者 |坛友微信交流群
proc sql; delete 后试试
proc sort;by var;run;

压缩数据集可以用options compress=yes;

复制表结构还是建议用斑竹的方法。

使用道具

8
yatming 发表于 2010-4-21 21:15:08 |只看作者 |坛友微信交流群
compress=yes的压缩方式是减少连续的重复字符,是对值进行压缩。而delete造成的空间保留,是来自数据集的页数保留没有删除的原因,可以试验一下,用contents分别查看delete语句执行前后的数据集,会看到页数并没有改变。delete的时候可以极端一点,全删记录:delete from table where 1=1,delete之后data set的pages是没有任何变化的。

使用道具

9
soporaeternus 发表于 2010-4-21 21:36:40 |只看作者 |坛友微信交流群
我现在越来越觉得这"得益"于SAS的伪数据库机制
Let them be hard, but never unjust

使用道具

10
pengh1005 发表于 2010-4-21 21:59:50 |只看作者 |坛友微信交流群
soporaeternus 发表于 2010-4-21 21:36
我现在越来越觉得这"得益"于SAS的伪数据库机制
受教了。

SAS的数据集与目前流行的数据库系统还是有很大的差别。不过SAS在一般数据的处理上还是兼有数据库系统和应用系统的优点的。(学习SAS时间不长,不知道理解对不对。呵呵)

关注DELETE语句,还因为当部分删除记录时,因其表空间没有变化,可能会对后续数据的访问造成时间上的大量占用,降低处理效率。虽然也可以用SAS语句来实现数据集的重建,但感觉如果有更直接的方法解决可能会更好。呵呵,也许是想偷懒吧!!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-22 01:54