全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6166 12
2013-08-27
悬赏 20 个论坛币 已解决
我有一百万行向类似下面的文本数据:
x1:小明,x2:1988-03-17  12:00:47,x3:男,x4:公务员,x5:喜欢打篮球,x6:1:14,25:10,67:01,6:23,x7:25岁
x1:小红,x2:1982-01-17  11:04:24,x3:女,x4:程序员,x5:喜欢乒乓球球,x6:16:14,25:10,67:01,6:23,x7:26岁
x1:小朱**x2:1990-01-17  05:07:11****x3:男,x4:运动员,x5:喜欢游泳/*/-x6:10:10,05:18,77:06,6:23,x7:23岁
x1:小梁**&x2:1978-09-17  05:07:11***x3:男,x4:会计员,x5:喜欢跑步,x6:11:14,07:18,47:09,6:23,x7:35岁

…………
有几个问题:
1.读取以上数据,本来想以逗号为分隔符,可是看到红色的乱码,发现不能这样读取数据,否则小朱的X1和X2会连在一起。现在希望读取每个Xi和X(i+1)之间的字符串或者数字(包括乱码但是不要逗号)。
2.读完数据以后,我希望将X2转换成为日期格式,比如小明X2这一列转换成1988/03/17 12:00:47。
3.读取完以后,发现蓝色部分X6字段需要再分割,而且只读每个取冒号和逗号之间的部分,比如小明分成X6a这一列是14,X6b是10,X6c是01,X6d是23。
4.最后做逻辑回归发现一百万数据,y=0的有930万,而y=1反应变量只有70万,比例是13:1,请问需要在y=0中进行抽样,使得1和0没有那么大差距,最佳比例又是多少?
先谢谢大家了!

最佳答案

scarfacetony 查看完整内容

看是这个意思不~
二维码

扫码加我 拉你入群

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

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

全部回复
2013-8-27 23:33:58
LinYouthen 发表于 2013-8-28 18:21
非常感谢您,请问一下:

如果按照您第一次给我的方法,如何计算每个人,比如小明,不同id的num总数以及 ...
复制代码
看是这个意思不~
二维码

扫码加我 拉你入群

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

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

2013-8-28 09:58:54
try this.
复制代码
二维码

扫码加我 拉你入群

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

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

2013-8-28 10:53:13
这里有些分隔符是中文格式下输入的,要先做个替换,替换成英文格式下的符号。就是   ,换成,  :换成:
复制代码
二维码

扫码加我 拉你入群

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

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

2013-8-28 15:11:27
scarfacetony 发表于 2013-8-28 10:53
这里有些分隔符是中文格式下输入的,要先做个替换,替换成英文格式下的符号。就是   ,换成,  :换成:
感谢两位大侠的帮助,两位程序让我受益匪浅,可是我有些不懂的还是需要请教两位:

@yongyitian,我的实际数据是存在很多个X的,不是全部中文或者数字,因此用X作为分隔符,会出现很多问题,另一方面,请问一下scan(x3, 1, ',*'),引号中存在两个字符是什么意思呢?,第三方面其实我的实际数据不仅包括x6a-x6d四个分割的,有些有6个,有些有9个等等,如果按照您的方法,有些繁琐。

@scarfacetony,您好,您的方法很好用,可是菜鸟我不懂的是dlm=',*/' missover这句话什么意思,  #1        @'x7:' x7 :$6.;,这句话前面的  #1又是什么意思,最后我希望每个名字出现的跟原来一样,而不是出现若干个小明,小红,请问该怎么做,谢谢你们了

二维码

扫码加我 拉你入群

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

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

2013-8-28 15:29:16
LinYouthen 发表于 2013-8-28 15:11
感谢两位大侠的帮助,两位程序让我受益匪浅,可是我有些不懂的还是需要请教两位:

@yongyitian,我的实 ...
dlm=   是指分隔符  上面语句中只要出现其中任一分隔符则进行分隔。
MISSOVER在这个语句中是可以省略的。
SAS在读取字段时,如果发现在该行仍有未读入的变量,会转入下一行继续读取变量 。MISSOVER可以阻止这个行为,每一行都从第一个变量时开始读取。

#1是 是强行读取该行,因为在X6读取时,我是直接读取30个字符,不看分隔符,这时很可能已经把X7这个字符串读到X6里面去了,   此时如果不用#1读X7,会在X6读的数据后找X7,就找不到……

如果一个小明只要一行的话,就不需要循环。
复制代码
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群