全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2130 6
2013-02-09
有这样套数据情况,
(#+number表示数据所在行,原始数据中不存在)
#1 Data for 5 Questions
#2
#3 ABCDEAACCEBBBBBCB
#4 BDADDAACCABBBEEBBBB
#5 CACA

假设我有五个变量, Q1,Q2,Q3,Q4,Q5。从第三行开始读取数据。每个变量长度为1,字符型
实际运行结果,前2个观测为
OBS   Q1   Q2   Q3   Q4   Q5
  1       A      B     C     D     E
  2       A      A     C     C     E
实际一共为8个observation
问,如何写input statement, 最好结合使用abbreviated variable list and informat list使input statement尽量简短些
我写了这样一套程序
Data 'C:\Users\DING ZHIJIA\Documents\spring 2013\STAT 501\topic3\HW3_Problem6';
*Produces a permanent SAS data set stored in a folder with a name of your choice using direct
referencing, not via defining a SAS library.*;

infile 'C:\Users\DING ZHIJIA\Documents\spring 2013\STAT 501\topic3\Assignment3_Files\HW3_B.txt';
Input #3 (QUES1-QUES5) (8*$1.) @@;

/*Reads the data starting on line 3
  Names the variables QUES1, QUES2, QUES3, QUES4, and QUES5
  Uses an abbreviated variable list and informat list in the INPUT statement*/

RUN;

proc print data='C:\Users\DING ZHIJIA\Documents\spring 2013\STAT 501\topic3\HW3_Problem6';
run;
结果log说 有 lost card

infile 里添加了 stopover option
log 描述出因为每行长度不同所以丢失数据
ERROR: INPUT statement exceeded record length.
       INFILE C:\Users\DING ZHIJIA\Documents\spring 2013\STAT
       501\topic3\Assignment3_Files\HW3_B.txt OPTION STOPOVER specified.
RULE:     ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+---
3         ABCDEAACCEBBBBBCB 17
4         BDADDAACCABBBEEBBBB 19
5         CACA 4

这个错误如何修正?

二维码

扫码加我 拉你入群

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

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

全部回复
2013-2-9 00:29:09
自己顶一下
二维码

扫码加我 拉你入群

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

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

2013-2-9 00:36:29
= =没人吗
二维码

扫码加我 拉你入群

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

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

2013-2-18 10:28:37
input ques1-ques5 $1. 这样子把空格也读成字符了,数据不大的话要么先把英文字母提取出来再读取?
二维码

扫码加我 拉你入群

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

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

2013-2-19 04:09:25
a6566792 发表于 2013-2-18 10:28
input ques1-ques5 $1. 这样子把空格也读成字符了,数据不大的话要么先把英文字母提取出来再读取?
差不多,我把文件导入txt,用infile从外部读取,问题修正了。从内部直接生成,会让数据不连续,每行结尾会多出来好多missing value
不过还是谢谢
二维码

扫码加我 拉你入群

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

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

2013-2-19 07:19:40
1) 如果是特殊情况,假设原始数据格式如下。建立数据文件TestData.txt
Data for 5 Questions

ABCDEAACCEBBBBBCB
BDADDAACCABBBEEBBBB
CACA

2) 从第三行读取原始数据。
data test;
infile 'C:\SAS Study\testdata.txt' missover;
length testcol $20;
input testcol $;
if _n_>2;
run;

3) 生成数据集。
data test2 (drop=i j testcol teststr);
set test end=eof;
array test{5} $1 q1-q5 ;
length teststr $200;
retain teststr;
teststr=trim(left(teststr))||trim(testcol);
if eof then do;
   do i=1 to 8;
      do j=1 to 5;
         test{j}=substr(teststr,j+i*5-5,1);
      end;
      output;
   end;
end;
run;

4) 输出数据。
proc print data=test2;
run;   

Obs q1 q2 q3 q4 q5
1  A  B  C  D  E
2  A  A  C  C  E
3  B  B  B  B  B
4  C  B  B  D  A
5  D  D  A  A  C
6  C  A  B  B  B
7  E  E  B  B  B
8  B  C  A  C  A

5) 说明,这仅仅是考虑所提供的特殊数据情况。如果数据变化,则需要重新考虑。
希望能够抛砖引玉。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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