楼主: tonywham
2586 7

请各位大虾帮我看看这个问题 [推广有奖]

  • 0关注
  • 0粉丝

小学生

21%

还不是VIP/贵宾

-

威望
0
论坛币
230 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
139 点
帖子
6
精华
0
在线时间
1 小时
注册时间
2006-3-2
最后登录
2016-5-17

楼主
tonywham 发表于 2007-4-22 07:20:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

小弟是sas的初学者,现在碰倒了一个问题,如下

Data Census2001;
infile 'indiv-ver2-050824.dat' lrecl=266;
input PROVP 1-2
AGEP 39-40

MOB5P 134
MOB1P 135
PROV5P 136-137
PROV1P 138-139;

Data Woman_2001_5year;
set Census2001;

if MOB5P=5 then migrant=1; else migrant=0;

if 18<=AGEP<=64;
if 18<=AGEP<=24 then AGEP=entry;
else if 25<=AGEP<=34 then AGEP=younger;
else if 35<=AGEP<=44 then AGEP=prime-younger;
else if 45<=AGEP<=54 then AGEP=prime-older;
else if 55<=AGEP<=64 then AGEP=older;

proc means; var AGEP ; by migrant;

结果在log里面显示

NOTE: Variable entry is uninitialized.
NOTE: Variable younger is uninitialized.
NOTE: Variable prime is uninitialized.
NOTE: Variable older is uninitialized.
NOTE: Missing values were generated as a result of performing an operation on missing values.
Each place is given by: (Number of times) at (Line):(Column).
66850 at 192:32 59135 at 193:32
请问各位大虾,我的问题出在哪里,感谢了

二维码

扫码加我 拉你入群

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

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

关键词:Migrant Census infile Grant lrecl 大虾

回帖推荐

zzheng722 发表于7楼  查看完整内容

Data Census2001;infile 'indiv-ver2-050824.dat' lrecl=266;input PROVP 1-2 AGEP 39-40 MOB5P 134 MOB1P 135 PROV5P 136-137 PROV1P 138-139; run; Data Woman_2001_5year; set Census2001; length agep_CLASS $ 13; if MOB5P=5 then migrant=1; else migrant=0; if 18<=AGEP<=24 then AGEP_CLASS='entry';else if 25<=AGEP<=34 then AGEP_CLASS='younger';else if 35<=AGEP<= ...

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

你是不是想对新的变量AGEP根据年龄情况依次赋值entry之类的,这是你要加上引号,表示是字符类型的值。if 18<=AGEP<=24 then AGEP='entry';其它都要加上引号,不然SAS会把entry等做为一个变量来处理,在你的数据集中没定义这几个变量,因此会出现变量没初始化的提示。这是个人看法

本帖被以下文库推荐

沙发
stonetj 发表于 2007-4-22 08:32:00
你是不是想对新的变量AGEP根据年龄情况依次赋值entry之类的,这是你要加上引号,表示是字符类型的值。if 18<=AGEP<=24 then AGEP='entry';其它都要加上引号,不然SAS会把entry等做为一个变量来处理,在你的数据集中没定义这几个变量,因此会出现变量没初始化的提示。这是个人看法
已有 1 人评分论坛币 收起 理由
bakoll + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

藤椅
ltjzzyz 发表于 2007-4-22 08:42:00

二楼找对了问题所在之处,但是方法不可行。即便是加上引号也没有用的,因为你把一个字符常值赋给一个数值变量,系统会自动把字符值转换为数值值,而‘entry’之类无法正常转换,故还是会出现错误

板凳
tonywham 发表于 2007-4-22 12:41:00
谢谢各位热心指教啊.小弟我学习sas才几天,所以比较基本问题都没搞好,现在已经解决了.除了对entry加引号外,还需要对AGEP这个变量名称进行改变,改变为AGEP1或者其他什么的,因为AGEP前面已经定义了数字,后面又定义成字符串sas就无法识别了.

报纸
tonywham 发表于 2007-4-22 12:46:00

另外一个比较奇怪的问题是,sas似乎无法识别比较长的字符串,除非你在后面用lable进行定义,否则它好象把我的prime-younger和prime-older合并为一个prime了,我只好从新定义为a1和a2它才能正确处理.

地板
wise 发表于 2007-4-22 13:47:00
好像都没加上$这个符号啊!

7
zzheng722 发表于 2007-4-24 01:58:00

Data Census2001;
infile 'indiv-ver2-050824.dat' lrecl=266;
input PROVP 1-2
AGEP 39-40

MOB5P 134
MOB1P 135
PROV5P 136-137
PROV1P 138-139;

run;

Data Woman_2001_5year;
set Census2001;

length agep_CLASS $ 13;

if MOB5P=5 then migrant=1; else migrant=0;

if 18<=AGEP<=24 then AGEP_CLASS='entry';
else if 25<=AGEP<=34 then AGEP_CLASS='younger';
else if 35<=AGEP<=44 then AGEP_CLASS='prime-younger';
else if 45<=AGEP<=54 then AGEP_CLASS='prime-older';
else if 55<=AGEP<=64 then AGEP_CALSS='older';

if 18<=AGEP<=64;

run;

proc means data=Woman_2001_5year;

class migrant;
var AGEP ;

run;

proc means data=Woman_2001_5year;

class AGEP_CLASS;
var AGEP ;

run;

***Note: stonetj is right. Use ' ' to assign character values to your new variable AGEP_CLASS. Use the maximum length for your AGEP_CLASS, length AGEP_CLASS $13;

One more thing, if you want to calculate the mean of AGEP, use class statement instead of by statement. If you want to use by statement, you have to sort your data by migrant first before you are using proc means.;




[此贴子已经被作者于2007-4-24 5:28:06编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 2 + 10 精彩帖子

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

8
nancyplease 发表于 2007-4-24 02:48:00
在这个步骤中系统无法正常转换字符,会出现错误,另外变量名称也要改变

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

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