楼主: peter
14153 14

[问答] 请问如何改变一个sas数据集中变量的长度,如何删除观测值? [推广有奖]

  • 4关注
  • 7粉丝

已卖:211份资源

学科带头人

27%

还不是VIP/贵宾

-

威望
0
论坛币
20263 个
通用积分
7.2198
学术水平
13 点
热心指数
13 点
信用等级
13 点
经验
5185 点
帖子
1105
精华
0
在线时间
1853 小时
注册时间
2005-3-10
最后登录
2025-12-7

楼主
peter 发表于 2011-3-26 11:51:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
假设现在我已经建立了一个数据集a,里面有20个变量x1-x20,数据体a 中有20000个观测值。
1、第12个变量x12为字符型变量,数据集建立时设定的长度为20,现在我想将x12 的长度改为50,该如何实现?


2、现在我要删去第128个观测值,该如何实现?
二维码

扫码加我 拉你入群

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

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

关键词:sas数据集 数据集 观测值 字符型变量 数据集建立 数据 变量 SAS 观测 长度

回帖推荐

cadlag 发表于2楼  查看完整内容

length x12 $ 50; format x12 $50.; if _n_=128 then delete;

本帖被以下文库推荐

沙发
cadlag 发表于 2011-3-28 21:36:45
length x12 $ 50;
format  x12 $50.;

if _n_=128 then delete;
已有 2 人评分学术水平 热心指数 收起 理由
peter + 1 + 1 感谢!
crackman + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 2   查看全部评分

藤椅
peter 发表于 2011-3-30 21:44:01
cadlag 发表于 2011-3-28 21:36
length x12 $ 50;
format  x12 $50.;

if _n_=128 then delete;
length x12 $ 50;
format  x12 $50.;


这种方式是不是会把X12原来的值都删掉?如果我想保留x12的值,只是改变它之前设定的格式该怎么办?
我自己建了一个数据库,原来设定的长度是25,后来发现长度太小,我想加到50,同时保留原来的信息。

板凳
peter 发表于 2011-3-30 22:02:17
那个删除观测值的命令也不成功啊,请问cadlag,能不能把完整的命令写出来,用的是什么过程?

报纸
hehekaixin 发表于 2011-3-31 10:34:30
cadlag的解答完全正确。
以下code复制到editor中即可:
data a;
length x12 $ 50;
set a;
format  x12 $50.;
if _n_=128 then delete;
run;
X12原来的值不会被删掉,因为length语句只是设定变量长度,而$50比原来的$20要长;
至于format语句是控制变量的显示格式,也要相应改成$50.。
已有 1 人评分学术水平 热心指数 收起 理由
peter + 1 + 1 感谢!

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

地板
peter 发表于 2011-3-31 21:36:41
hehekaixin 发表于 2011-3-31 10:34
cadlag的解答完全正确。
以下code复制到editor中即可:
data a;
length x12 $ 50;
set a;
format  x12 $50.;
if _n_=128 then delete;
run;
X12原来的值不会被删掉,因为length语句只是设定变量长度,而$50比原来的$20要长;
至于format语句是控制变量的显示格式,也要相应改成$50.。
还是不行,这次我吧完整的结果贴出来,请大家看一下问题在哪里?
命令如下:
data peter;
length x y z $20;
input x y z;
cards;
a b c
e f g
h i j
;
run;

data _null_;
set peter;
put _all_;
run;


data peter;
length x $50;
run;
set peter;
format x $50;
if _n_=3 then delete;
run;

sas的log结果如下:

82   data peter;
83   length x y z $20;
84   input x y z;
85   cards;

NOTE: The data set WORK.PETER has 3 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


89   ;
90   run;

91   data _null_;
92   set peter;
93   put _all_;
94   run;

x=a y=b z=c _ERROR_=0 _N_=1
x=e y=f z=g _ERROR_=0 _N_=2
x=h y=i z=j _ERROR_=0 _N_=3
NOTE: There were 3 observations read from the data set WORK.PETER.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


95   data peter;
96   length x $50;
97   run;

NOTE: Variable x is uninitialized.
NOTE: The data set WORK.PETER has 1 observations and 1 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


98   set peter;
     ---
     180

ERROR 180-322: Statement is not valid or it is used out of proper order.

99   format x $50;
     ------
     180

ERROR 180-322: Statement is not valid or it is used out of proper order.

100  if _n_=3 then delete;
     --
     180

ERROR 180-322: Statement is not valid or it is used out of proper order.

101  run;

7
33lisa 发表于 2011-4-2 12:56:42
data peter;
length x $50;
run;
set peter;
format x $50;
if _n_=3 then delete;
run;

你这多了个run啊,当然不work啦
把中间那个run;去掉应该就好了
已有 2 人评分学术水平 热心指数 收起 理由
crackman + 1 鼓励积极发帖讨论
peter + 1 + 1 感谢!

总评分: 学术水平 + 1  热心指数 + 2   查看全部评分

8
peter 发表于 2011-4-3 22:48:11
33lisa 发表于 2011-4-2 12:56
data peter;
length x $50;
run;
set peter;
format x $50;
if _n_=3 then delete;
run;

你这多了个run啊,当然不work啦
把中间那个run;去掉应该就好了
去掉中间的run了,还是不行。


12   data peter;
13   length x $50;
14   set peter;
15   format x $50;
               --
               85
               76
ERROR 85-322: Expecting a format name.

ERROR 76-322: Syntax error, statement will be ignored.

16   if _n_=3 then delete;
17   run;

9
hongxx 发表于 2011-4-4 01:26:23
format x $50.;

少了Period :. 。
已有 2 人评分学术水平 热心指数 收起 理由
crackman + 1 鼓励积极发帖讨论
peter + 1 + 1 感谢!

总评分: 学术水平 + 1  热心指数 + 2   查看全部评分

10
peter 发表于 2011-4-4 21:33:22
hongxx 发表于 2011-4-4 01:26
format x $50.;

少了Period :. 。
谢谢!终于成功了!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 03:57