楼主: junzjg
4417 8

[问答] SAS读取TXT文件出现疑惑,求帮忙~ [推广有奖]

  • 1关注
  • 0粉丝

本科生

22%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
1.3501
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
676 点
帖子
24
精华
0
在线时间
111 小时
注册时间
2014-8-5
最后登录
2025-7-13

楼主
junzjg 发表于 2015-2-5 15:37:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好,近期我拿到一份txt文件,里面内容如下(大概):
3031:1;3032:2;3033:2009;
3031:1;3032:2;3033:2009;
3031:2;3033:2009;
3031:1;3032:2;3033:2009;
内容中;为分隔符,而:前部分代表变量名,后部分代表具体的观测值,好像3031是变量名,1就是具体的观测。而且如果出现缺失的话,就会好像第三行观测一样,直接没了那一个变量。请问应该如何将他们导入SAS?
我的想法是提取3031为变量名,然后输入:后的具体数值,而且需要每一列对应起来,缺失的要填补起来。因为数据高达数万,现在不知道如何是好,求解答,多谢。
二维码

扫码加我 拉你入群

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

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

关键词:txt 求帮忙 不知道 大家好 观测值 而且 如何

沙发
别再堕落 学生认证  发表于 2015-2-5 15:49:06

藤椅
junzjg 发表于 2015-2-5 16:21:04
别再堕落 发表于 2015-2-5 15:49
亲,你有一些小提示给我么~

板凳
pobel 在职认证  发表于 2015-2-5 17:17:17
data _null_;
   infile "test.txt" end=last;
   * Generate code;
   input;
   code="_"||tranwrd(compress(_infile_),";",";_");
   code=tranwrd(compress(code),":","=");

   * Execute;
  if _n_=1 then call execute("data test;");
   call execute(substr(code,1,length(code)-1)||"output;");
    call execute("call missing(of _:);");
  if last then call execute("run;");
run;

报纸
junzjg 发表于 2015-2-5 17:40:43
pobel 发表于 2015-2-5 17:17
data _null_;
   infile "test.txt" end=last;
   * Generate code;
0 0大神!!!请问,我在运行的时候,因为TXT中存在一些字符型,就是中文数据,就出出现错误,请问怎么解决呢?
就好像这样的数据:
3031:1;3032:2;3033:2009;3044:张;
3031:1;3032:2;3033:2009;3044:张;
3031:1;3033:2009;3044:张;
会出现如下的ERROR:
NOTE: CALL EXECUTE 生成了代码行。
1    + data test;
2    + _3031=1;_3032=2;_3033=2009;_3044=张;output;
ERROR: “张”不是有效的 SAS 名称。
ERROR: “张”不是有效的 SAS 名称。
ERROR: “张”不是有效的 SAS 名称。
3    + call missing(of _:);
4    + _3031=1;_3032=2;_3033=2009;_3044=张;output;
ERROR: “张”不是有效的 SAS 名称。
ERROR: “张”不是有效的 SAS 名称。
ERROR: “张”不是有效的 SAS 名称。
5    + call missing(of _:);
6    + _3031=1;_3033=2009;_3044=张;output;
ERROR: “张”不是有效的 SAS 名称。
ERROR: “张”不是有效的 SAS 名称。
ERROR: “张”不是有效的 SAS 名称。
7    + call missing(of _:);
8    + run;
求解答,多谢~!

地板
junzjg 发表于 2015-2-5 20:04:41
pobel 发表于 2015-2-5 17:17
data _null_;
   infile "test.txt" end=last;
   * Generate code;
你好,我分析程序代码发现,只要观测值是中文的,不知道为何就不会纳入到变量里面;
选用:options validvarname=any; 代码以后,
发觉所有的中文的观测值都变成了唯一的变量名。。。有点无从下手了,希望解答,多谢~!
请问问题是出在:   call execute(substr(code,1,length(code)-1)||"output;");么?因为汉字字符型占据的长度是2?

7
pobel 在职认证  发表于 2015-2-6 07:50:00
junzjg 发表于 2015-2-5 20:04
你好,我分析程序代码发现,只要观测值是中文的,不知道为何就不会纳入到变量里面;
选用:options vali ...
字符型变量的值应该用引号,如_3044="张“;

8
junzjg 发表于 2015-2-6 11:49:04
pobel 发表于 2015-2-6 07:50
字符型变量的值应该用引号,如_3044="张“;
多谢pobel的指点迷津。
根据你的说法,我修改了一下程序:

   code="_"||tranwrd(compress(_infile_),";","‘;_");
   code=tranwrd(compress(code),":","=’");

在替换的时候,给等号后面和分号前面增加单引号。在一些文档上可以很顺利的执行。
但是不知道为何,对一些code进行转换的时候,我发觉当把:替换为”’="就会在code的末端出现一些奇怪的数字,导致程序运行失败,请问有更好的替换方式么?多谢~!

替换后,每一条字符串可能不是以;_结尾,有些可能后面有5,或者40,410,这些数字,我也在考虑能否用函数删除;_后面的数字?

9
junzjg 发表于 2015-2-6 13:12:30
pobel 发表于 2015-2-6 07:50
字符型变量的值应该用引号,如_3044="张“;
你好~~我终于发现在哪儿错误了,是因为字符串的长度太短导致的,调节长度就可以解决问题~~

真是很感谢你的帮忙~~再次致谢!!

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

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