由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
ChineseClassics版 - 请教一个SAS读中文数据库的问题 (转载)
相关主题
请教SAS安装问题,包子答谢 (转载)help! 读CSV文件读得要崩溃了
请教一个SAS读中文数据库的问题问一个数据处理的问题,该如何实现单列转多行?14楼有图更新
请教一个SAS读中文数据库的问题 (转载)[合集] SAS data input help
a quick question importing txt into SAS请教一个SAS数据input的问题
help. txt 读入问题[合集] 请教一个SAS数据input的问题
问个SAS 数据读入的问题HELP~~About reading sas data set
问一个数据分析的问题这里人多,问个技术问题,500个xml文件Incorporate into一个excel文件
reading data into sas 问题How to work on this dataset?
相关话题的讨论汇总
话题: sas话题: cells话题: excel话题: 字段话题: address
进入ChineseClassics版参与讨论
1 (共1页)
D******6
发帖数: 6211
1
【 以下文字转载自 Statistics 讨论区 】
发信人: Doha2006 (花猫), 信区: Statistics
标 题: 请教一个SAS读中文数据库的问题
发信站: BBS 未名空间站 (Sun Feb 21 23:45:37 2010, 美东)
我用SAS读一个中文数据库,字符字段
源文件如下:
id name address
1, 张三,北京市东城区
2,李四,北京市西城区
。。。
。。。
我用的代码如下:
DATA name;
infile 'G:\name.csv' DLM = ',' DSD MISSOVER;
input id $ name $ address $;
读到SAS里的结果如下:
id name address
1 张三 北京市东
2 李四 北京市西
现在出现的问题是,如果address太长或者任何字符字段长过8个都读不进去,读到SAS
里以后,只有4个中文字符,也就是字节长8 。不是说以$这样结尾读数据都是按照有多
长读多长么?还是哪里有什么限制,我没有打开?
谢谢指点!
uq
发帖数: 1004
2
很專業
看上去需要改動字符串長度的定義?

【在 D******6 的大作中提到】
: 【 以下文字转载自 Statistics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: Statistics
: 标 题: 请教一个SAS读中文数据库的问题
: 发信站: BBS 未名空间站 (Sun Feb 21 23:45:37 2010, 美东)
: 我用SAS读一个中文数据库,字符字段
: 源文件如下:
: id name address
: 1, 张三,北京市东城区
: 2,李四,北京市西城区
: 。。。

D******6
发帖数: 6211
3
但是这个字段的长度不是固定的。有的地址可能是10个汉字,有的可能是20个。所以,
我觉得应该让SAS自动读,逗号是分隔符。问题是,如果是英文字符字段,长短不一没
有问题,SAS分得清。就是中文的字段长短不同,SAS就只读8个(4个中文字符)。。。

【在 uq 的大作中提到】
: 很專業
: 看上去需要改動字符串長度的定義?

r****y
发帖数: 26819
4
缺省为8个字节
如果想更长,先用LENGTH说明,比如:
LENGTH address $ 12;

【在 D******6 的大作中提到】
: 【 以下文字转载自 Statistics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: Statistics
: 标 题: 请教一个SAS读中文数据库的问题
: 发信站: BBS 未名空间站 (Sun Feb 21 23:45:37 2010, 美东)
: 我用SAS读一个中文数据库,字符字段
: 源文件如下:
: id name address
: 1, 张三,北京市东城区
: 2,李四,北京市西城区
: 。。。

D******6
发帖数: 6211
5
瓦,这个内行!
可是,一来这个字段不是固定长度的,有的可能是12个,有的可能是32个。。。
二来,这个length 在哪设?在data procedure里,还是在开头?

【在 r****y 的大作中提到】
: 缺省为8个字节
: 如果想更长,先用LENGTH说明,比如:
: LENGTH address $ 12;

k***g
发帖数: 7244
6
你的源文件是 CSV,直接在 Excel 里用 VBA 吧,更简单些
Sub duoha()
For i = 1 To 2
Cells(i, "B") = Right(Cells(i, "A"), Len(Cells(i, "A")) - InStr(Cells(i, "A"
), ","))
Cells(i, "A") = Left(Cells(i, "A"), InStr(Cells(i, "A"), ",") - 1)
Next i
End Sub
这样生成的 column A 是 id, column B 是地址

【在 D******6 的大作中提到】
: 瓦,这个内行!
: 可是,一来这个字段不是固定长度的,有的可能是12个,有的可能是32个。。。
: 二来,这个length 在哪设?在data procedure里,还是在开头?

D******6
发帖数: 6211
7
嗯。。。这个太专业了。。。。
我好几个表,只有这个是CSV的,我逐个转成EXCEL也麻烦,因为有些表特别大。。。上
million 记录。。。
这个SAS奇怪,如果是英文的字段,多长都能读,就是中文的,就读4个汉字。

A"

【在 k***g 的大作中提到】
: 你的源文件是 CSV,直接在 Excel 里用 VBA 吧,更简单些
: Sub duoha()
: For i = 1 To 2
: Cells(i, "B") = Right(Cells(i, "A"), Len(Cells(i, "A")) - InStr(Cells(i, "A"
: ), ","))
: Cells(i, "A") = Left(Cells(i, "A"), InStr(Cells(i, "A"), ",") - 1)
: Next i
: End Sub
: 这样生成的 column A 是 id, column B 是地址

r****y
发帖数: 26819
8
取上限嘛,定义一个上限,就是数据库里表格里每一列,也是有上限的。
第一次用变量之前拿length定制一下就可以了。。。

【在 D******6 的大作中提到】
: 瓦,这个内行!
: 可是,一来这个字段不是固定长度的,有的可能是12个,有的可能是32个。。。
: 二来,这个length 在哪设?在data procedure里,还是在开头?

r****y
发帖数: 26819
9
excel的行数上限太小了,换成mysql之类的试试看

【在 D******6 的大作中提到】
: 嗯。。。这个太专业了。。。。
: 我好几个表,只有这个是CSV的,我逐个转成EXCEL也麻烦,因为有些表特别大。。。上
: million 记录。。。
: 这个SAS奇怪,如果是英文的字段,多长都能读,就是中文的,就读4个汉字。
:
: A"

D******6
发帖数: 6211
10
我刚试了,好像行了!
瓦,谢谢谢谢!

【在 r****y 的大作中提到】
: 取上限嘛,定义一个上限,就是数据库里表格里每一列,也是有上限的。
: 第一次用变量之前拿length定制一下就可以了。。。

相关主题
问个SAS 数据读入的问题help! 读CSV文件读得要崩溃了
问一个数据分析的问题问一个数据处理的问题,该如何实现单列转多行?14楼有图更新
reading data into sas 问题[合集] SAS data input help
进入ChineseClassics版参与讨论
D******6
发帖数: 6211
11
你们都会的这么多。。。我都是n久以前用的mysql了。。。现在都忘了。
你给的建议应该work了,我在继续试。。。

【在 r****y 的大作中提到】
: excel的行数上限太小了,换成mysql之类的试试看
k***g
发帖数: 7244
12
million 。。。 那还是别用 Excel 了,呵呵,Excel 最大也就支持六万多
observations

【在 D******6 的大作中提到】
: 嗯。。。这个太专业了。。。。
: 我好几个表,只有这个是CSV的,我逐个转成EXCEL也麻烦,因为有些表特别大。。。上
: million 记录。。。
: 这个SAS奇怪,如果是英文的字段,多长都能读,就是中文的,就读4个汉字。
:
: A"

D******6
发帖数: 6211
13
嗯,是的。:)
不过,您记性太好了,VBA随手就来。。。我天天用SAS,也要看着手册或者就程序写代
码。。。

【在 k***g 的大作中提到】
: million 。。。 那还是别用 Excel 了,呵呵,Excel 最大也就支持六万多
: observations

k***g
发帖数: 7244
14
用到的 mysql 函数其实和 VBA 的一样,都是 Instr() 找 逗号,Left() Right() 切割
substring,就是 Loop 的结构不太一样

【在 D******6 的大作中提到】
: 你们都会的这么多。。。我都是n久以前用的mysql了。。。现在都忘了。
: 你给的建议应该work了,我在继续试。。。

D******6
发帖数: 6211
15
都不记得了。。。我现在常用的SAS和stata都经常混,必须得开卷编程,闭卷就乱了,
哈哈。

切割

【在 k***g 的大作中提到】
: 用到的 mysql 函数其实和 VBA 的一样,都是 Instr() 找 逗号,Left() Right() 切割
: substring,就是 Loop 的结构不太一样

k***g
发帖数: 7244
16
呵呵, VBA 比较 intuitive 啊,如果在 Stata 或者 R 里写这些东西,我也得去翻 h
elp 文档,不过我们不怎么用 SAS,所以吃你的 SAS 包子受之有愧:)

【在 D******6 的大作中提到】
: 嗯,是的。:)
: 不过,您记性太好了,VBA随手就来。。。我天天用SAS,也要看着手册或者就程序写代
: 码。。。

r****y
发帖数: 26819
17
如果用mysql读csv,不用loop:
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
就是一个命令

切割

【在 k***g 的大作中提到】
: 用到的 mysql 函数其实和 VBA 的一样,都是 Instr() 找 逗号,Left() Right() 切割
: substring,就是 Loop 的结构不太一样

D******6
发帖数: 6211
18
呵呵,我省事,就写SAS的包子了,总之是个SAS引得头。
是,其实EXCEL和VBA都挺强大的,就是得用。
好了,nite,今晚上解决了一个问题,很高兴!
也要谢谢罗尼!

h

【在 k***g 的大作中提到】
: 呵呵, VBA 比较 intuitive 啊,如果在 Stata 或者 R 里写这些东西,我也得去翻 h
: elp 文档,不过我们不怎么用 SAS,所以吃你的 SAS 包子受之有愧:)

r****y
发帖数: 26819
19
load data local infile 'name.csv' into table contacts
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(id, name, address)

【在 D******6 的大作中提到】
: 【 以下文字转载自 Statistics 讨论区 】
: 发信人: Doha2006 (花猫), 信区: Statistics
: 标 题: 请教一个SAS读中文数据库的问题
: 发信站: BBS 未名空间站 (Sun Feb 21 23:45:37 2010, 美东)
: 我用SAS读一个中文数据库,字符字段
: 源文件如下:
: id name address
: 1, 张三,北京市东城区
: 2,李四,北京市西城区
: 。。。

D******6
发帖数: 6211
20
谢谢!以后我不去统计版贴问题了,就贴古典了。

【在 r****y 的大作中提到】
: 如果用mysql读csv,不用loop:
: http://dev.mysql.com/doc/refman/5.1/en/load-data.html
: 就是一个命令
:
: 切割

相关主题
请教一个SAS数据input的问题这里人多,问个技术问题,500个xml文件Incorporate into一个excel文件
[合集] 请教一个SAS数据input的问题How to work on this dataset?
HELP~~About reading sas data setSAS base 70 题第29 和 31题
进入ChineseClassics版参与讨论
k***g
发帖数: 7244
21
呵呵,我说的loop是切割 string 的loop,譬如 data set 中的 string 都是 tab 间隔
的,你没办法直接在 import 数据的时候用逗号切割啊

【在 r****y 的大作中提到】
: 如果用mysql读csv,不用loop:
: http://dev.mysql.com/doc/refman/5.1/en/load-data.html
: 就是一个命令
:
: 切割

r****y
发帖数: 26819
22
FIELDS TERMINATED BY '\t'
还是可以不用loop

间隔

【在 k***g 的大作中提到】
: 呵呵,我说的loop是切割 string 的loop,譬如 data set 中的 string 都是 tab 间隔
: 的,你没办法直接在 import 数据的时候用逗号切割啊

k***g
发帖数: 7244
23
如果用 fields terminated by '\t' 还是无法切割逗号啊,譬如 在excel 中输入数据
,存为 tab 为分隔符的 csv,用文本打开,结构是这样的:
"张三,北京市西城区" 工人 已婚
"李四,北京市东城区" 农民 离异
你在 load 数据的时候无法同时兼顾 , 和 tab 啊

【在 r****y 的大作中提到】
: FIELDS TERMINATED BY '\t'
: 还是可以不用loop
:
: 间隔

r****y
发帖数: 26819
24
这不是两个replace all就解决的问题嘛
replace all " to space
replace all , to tab
就算数据里有"和,还是一个regular expression replace all就解决了

【在 k***g 的大作中提到】
: 如果用 fields terminated by '\t' 还是无法切割逗号啊,譬如 在excel 中输入数据
: ,存为 tab 为分隔符的 csv,用文本打开,结构是这样的:
: "张三,北京市西城区" 工人 已婚
: "李四,北京市东城区" 农民 离异
: 你在 load 数据的时候无法同时兼顾 , 和 tab 啊

j******n
发帖数: 21641
25
如果只是个别比较长,系统资源也很浪费啊

【在 D******6 的大作中提到】
: 嗯,是的。:)
: 不过,您记性太好了,VBA随手就来。。。我天天用SAS,也要看着手册或者就程序写代
: 码。。。

k***g
发帖数: 7244
26
这个。。。如果允许 replace 的话,在 stata 里直接
insheet using xx.csv, tab
就可以了,比 mysql 的 syntax 还简单,呵呵

【在 r****y 的大作中提到】
: 这不是两个replace all就解决的问题嘛
: replace all " to space
: replace all , to tab
: 就算数据里有"和,还是一个regular expression replace all就解决了

r****y
发帖数: 26819
27
。。。随便一个编辑器都能做replace吧,啥时候不允许。。。

【在 k***g 的大作中提到】
: 这个。。。如果允许 replace 的话,在 stata 里直接
: insheet using xx.csv, tab
: 就可以了,比 mysql 的 syntax 还简单,呵呵

D******6
发帖数: 6211
28
瓦,神仙们还在讨论。。。
好,以后我有问题,多在这里提,可以学到很多。。。哈哈。

【在 r****y 的大作中提到】
: 。。。随便一个编辑器都能做replace吧,啥时候不允许。。。
1 (共1页)
进入ChineseClassics版参与讨论
相关主题
How to work on this dataset?help. txt 读入问题
SAS base 70 题第29 和 31题问个SAS 数据读入的问题
怎么把文本文件(TEXT)转到SAS问一个数据分析的问题
谁能推荐好一点的Excel VBA的书?reading data into sas 问题
请教SAS安装问题,包子答谢 (转载)help! 读CSV文件读得要崩溃了
请教一个SAS读中文数据库的问题问一个数据处理的问题,该如何实现单列转多行?14楼有图更新
请教一个SAS读中文数据库的问题 (转载)[合集] SAS data input help
a quick question importing txt into SAS请教一个SAS数据input的问题
相关话题的讨论汇总
话题: sas话题: cells话题: excel话题: 字段话题: address