楼主: 小邓
7285 11

求助:变量属性转换问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
76 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
204 点
帖子
28
精华
0
在线时间
24 小时
注册时间
2007-1-11
最后登录
2010-2-25

楼主
小邓 发表于 2009-8-29 14:36:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的数据在数据集mdata里面,我想把表示日期那一列变成可以提取月份的格式,我原来数据集的格式是1997-06-27,我运行程序month(date)出错,然后用下面的程序想变成month可以使用的格式,
set doctor.mdata;
format date date7.;
run;

运行结果为:
27   data a;
28   set doctor.mdata;
29   format date date7.;
                 ------
                 48
ERROR 48-59: 输出格式 $DATE 没有找到或无法加载。

30   run;

NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK.A 可能不完整。该步停止时,共有 0 个观测和 10 个变量。
WARNING: 数据集 WORK.A 由于该步已停止,而没有被替换


请各位高手帮帮忙,周围没有人可以问,实在是很郁闷
二维码

扫码加我 拉你入群

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

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

关键词:warning doctor format month FORMA 求助 变量 属性

回帖推荐

sushe1527 发表于9楼  查看完整内容

导入的是字符 试试这个 data abc1; set abc; month1= substr(trddt,6,2); if month1=06 then output; run;

本帖被以下文库推荐

沙发
sushe1527 发表于 2009-8-29 15:11:38
data b;
input  date  yymmdd10.;   
format date yymmdd10.;
cards;
1997-06-27
;
run;
data a;
set b;
month=month(date);
run;

藤椅
小邓 发表于 2009-8-29 15:23:09
2# sushe1527
请问你上面那个input是用来干什么的,现在mdata已经是sas数据集了,不用再从外部文件读入了

板凳
小邓 发表于 2009-8-29 15:31:14
2# sushe1527
我记得好像1997-06-27这种格式的日期也是可以使用month的,我用了一个简单的例子来使用month函数,使用下面的程序:

data abc1;
set abc;
if month(trddt)=8;
run;

运行结果是这样的:
120  data abc1;
121  set abc;
122  if month(trddt)=8;
123  run;
NOTE: 字符值已转换为数字值,位置:(行:列)。
      122:10
NOTE: 无效的数值数据 Trddt='2006-01-04' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-04 Clsprc=6.28 _ERROR_=1 _N_=1
NOTE: 无效的数值数据 Trddt='2006-01-05' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-05 Clsprc=6.32 _ERROR_=1 _N_=2
NOTE: 无效的数值数据 Trddt='2006-01-06' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-06 Clsprc=6.41 _ERROR_=1 _N_=3
NOTE: 无效的数值数据 Trddt='2006-01-09' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-09 Clsprc=6.39 _ERROR_=1 _N_=4
NOTE: 无效的数值数据 Trddt='2006-01-10' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-10 Clsprc=6.28 _ERROR_=1 _N_=5
NOTE: 无效的数值数据 Trddt='2006-01-11' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-11 Clsprc=6.23 _ERROR_=1 _N_=6
NOTE: 无效的数值数据 Trddt='2006-01-12' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-12 Clsprc=6.28 _ERROR_=1 _N_=7
NOTE: 无效的数值数据 Trddt='2006-01-13' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-13 Clsprc=6.21 _ERROR_=1 _N_=8
NOTE: 无效的数值数据 Trddt='2006-01-16' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-16 Clsprc=6.09 _ERROR_=1 _N_=9
NOTE: 无效的数值数据 Trddt='2006-01-17' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-17 Clsprc=6.14 _ERROR_=1 _N_=10
NOTE: 无效的数值数据 Trddt='2006-01-18' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-18 Clsprc=6.23 _ERROR_=1 _N_=11
NOTE: 无效的数值数据 Trddt='2006-01-19' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-19 Clsprc=6.28 _ERROR_=1 _N_=12
NOTE: 无效的数值数据 Trddt='2006-01-20' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-20 Clsprc=6.23 _ERROR_=1 _N_=13
NOTE: 无效的数值数据 Trddt='2006-01-23' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-23 Clsprc=6.18 _ERROR_=1 _N_=14
NOTE: 无效的数值数据 Trddt='2006-01-24' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-24 Clsprc=6.26 _ERROR_=1 _N_=15
NOTE: 无效的数值数据 Trddt='2006-01-25' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-01-25 Clsprc=6.35 _ERROR_=1 _N_=16
NOTE: 无效的数值数据 Trddt='2006-02-06' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-02-06 Clsprc=6.4 _ERROR_=1 _N_=17
NOTE: 无效的数值数据 Trddt='2006-02-07' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-02-07 Clsprc=6.3 _ERROR_=1 _N_=18
NOTE: 无效的数值数据 Trddt='2006-02-08' 出现在行 122 列 10。
Stkcd=000001 Trddt=2006-02-08 Clsprc=6.3 _ERROR_=1 _N_=19
NOTE: 无效的数值数据 Trddt='2006-02-09' 出现在行 122 列 10。
ERROR: 达到 ERRORS= 选项设置的限制。将不列显该类型的其他错误。
Stkcd=000001 Trddt=2006-02-09 Clsprc=6.19 _ERROR_=1 _N_=20
NOTE: 缺失值的生成是对缺失值执行操作的结果。
       指定每个位置的方式: (次数)(行:列)。
      829 122:4
NOTE: 从数据集 WORK.ABC 读取了 829 个观测。
NOTE: 数据集 WORK.ABC1 有 0 个观测和 3 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.04 秒
      CPU 时间         0.01 秒

报纸
sushe1527 发表于 2009-8-29 15:38:25
谁来解答一下?我是弄不了了

地板
小邓 发表于 2009-8-29 15:47:36
5# sushe1527
你好,按照你给的程序,我弄出来了,是如下的程序
data abc;
set abc;
input  date  yymmdd10.;   
format date yymmdd10.;
cards;
2006-01-04
;
run;
data abc1;
set abc;
month= month(date);
run;
但是很郁闷的是,这里只是提取了2006-01-04这一个值,后面就返回了这个值的月份,数据表中的其它的变量都没了,在我的数据集里面是有很多个观测值的,我是想找出每年六月的观测值。

7
sushe1527 发表于 2009-8-29 15:53:50
雷焦了
data x;
set mdata;
month=month(date);
if month=06 then output;run;

8
小邓 发表于 2009-8-29 15:59:26
7# sushe1527
我也很郁闷,我也是用的这个程序,但是出来不了结果
data abc1;
set abc;
month1= month(trddt);
run;

运行结果:
390  data abc1;
391  set abc;
392  month1= month(trddt);
393  run;
NOTE: 字符值已转换为数字值,位置:(行:列)。
      392:15
NOTE: 无效的数值数据 Trddt='2006-01-04' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-04 Clsprc=6.28 month1=. _ERROR_=1 _N_=1
NOTE: 无效的数值数据 Trddt='2006-01-05' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-05 Clsprc=6.32 month1=. _ERROR_=1 _N_=2
NOTE: 无效的数值数据 Trddt='2006-01-06' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-06 Clsprc=6.41 month1=. _ERROR_=1 _N_=3
NOTE: 无效的数值数据 Trddt='2006-01-09' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-09 Clsprc=6.39 month1=. _ERROR_=1 _N_=4
NOTE: 无效的数值数据 Trddt='2006-01-10' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-10 Clsprc=6.28 month1=. _ERROR_=1 _N_=5
NOTE: 无效的数值数据 Trddt='2006-01-11' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-11 Clsprc=6.23 month1=. _ERROR_=1 _N_=6
NOTE: 无效的数值数据 Trddt='2006-01-12' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-12 Clsprc=6.28 month1=. _ERROR_=1 _N_=7
NOTE: 无效的数值数据 Trddt='2006-01-13' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-13 Clsprc=6.21 month1=. _ERROR_=1 _N_=8
NOTE: 无效的数值数据 Trddt='2006-01-16' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-16 Clsprc=6.09 month1=. _ERROR_=1 _N_=9
NOTE: 无效的数值数据 Trddt='2006-01-17' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-17 Clsprc=6.14 month1=. _ERROR_=1 _N_=10
NOTE: 无效的数值数据 Trddt='2006-01-18' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-18 Clsprc=6.23 month1=. _ERROR_=1 _N_=11
NOTE: 无效的数值数据 Trddt='2006-01-19' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-19 Clsprc=6.28 month1=. _ERROR_=1 _N_=12
NOTE: 无效的数值数据 Trddt='2006-01-20' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-20 Clsprc=6.23 month1=. _ERROR_=1 _N_=13
NOTE: 无效的数值数据 Trddt='2006-01-23' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-23 Clsprc=6.18 month1=. _ERROR_=1 _N_=14
NOTE: 无效的数值数据 Trddt='2006-01-24' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-24 Clsprc=6.26 month1=. _ERROR_=1 _N_=15
NOTE: 无效的数值数据 Trddt='2006-01-25' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-01-25 Clsprc=6.35 month1=. _ERROR_=1 _N_=16
NOTE: 无效的数值数据 Trddt='2006-02-06' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-02-06 Clsprc=6.4 month1=. _ERROR_=1 _N_=17
NOTE: 无效的数值数据 Trddt='2006-02-07' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-02-07 Clsprc=6.3 month1=. _ERROR_=1 _N_=18
NOTE: 无效的数值数据 Trddt='2006-02-08' 出现在行 392 列 15。
Stkcd=000001 Trddt=2006-02-08 Clsprc=6.3 month1=. _ERROR_=1 _N_=19
NOTE: 无效的数值数据 Trddt='2006-02-09' 出现在行 392 列 15。
ERROR: 达到 ERRORS= 选项设置的限制。将不列显该类型的其他错误。
Stkcd=000001 Trddt=2006-02-09 Clsprc=6.19 month1=. _ERROR_=1 _N_=20
NOTE: 缺失值的生成是对缺失值执行操作的结果。
       指定每个位置的方式: (次数)(行:列)。
      829 392:9
NOTE: 从数据集 WORK.ABC 读取了 829 个观测。
NOTE: 数据集 WORK.ABC1 有 829 个观测和 4 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.01 秒
      CPU 时间         0.01 秒

9
sushe1527 发表于 2009-8-29 16:13:00
导入的是字符 试试这个
data abc1;
set abc;
month1= substr(trddt,6,2);
if month1=06 then output;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

10
小邓 发表于 2009-8-29 16:23:30
9# sushe1527
非常感谢,结果出来了,您的意思是我导入的日期的格式是字符型的,就不能用month这个函数对吗?那实际上后面形成的新变量month1也是字符型的,不过只要可以达到目的就好了,但是我还是很好奇怎么样我才可以使用month这个函数,我不可以用什么方法把变量trddt变成数值型的,再使用month这个函数

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 12:37