楼主: madcrowd
3205 15

[原创博文] 请问SAS怎么读入这段数据啊 [推广有奖]

  • 0关注
  • 0粉丝

已卖:176份资源

高中生

15%

还不是VIP/贵宾

-

威望
0
论坛币
573 个
通用积分
0.4500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
155 点
帖子
12
精华
0
在线时间
19 小时
注册时间
2010-5-30
最后登录
2024-5-9

楼主
madcrowd 发表于 2012-5-3 22:43:14 |AI写论文
10论坛币
假设有一个Data.txt文件,里面存有男女生的脂肪含量,数据如下:
男性组: 13.3 19 20 8 18 22 20 31 21 12 16 12 24
女性组: 22 26 16 12 21.7 23.2 21 28 30 23

请问怎么讲这个txt文件读入SAS数据集啊
最终结果像这样
sex   fat
男     13.3
男     19
.....

最佳答案

chendonghui1987 查看完整内容

data AllSubjects; input sex $ @; /*13为所有行中最大的fat值的个数*/ do i=1 to 13; input fat @; output; end; datalines; m 13.3 19 20 8 18 22 20 31 21 12 16 12 24 f 22 26 16 12 21.7 23.2 21 28 30 23 run;
关键词:sas数据集 Data txt SEX 数据集 男女生 女性

回帖推荐

webgu 发表于8楼  查看完整内容

可以试试这个。其实数据不大,没必要这折腾。

goldbaodi 发表于10楼  查看完整内容

没事,凑个热闹: data test; input sex $ @1 fat_all $ 3-50; datalines; m 13.3 19 20 8 18 22 20 31 21 12 16 12 24 f 22 26 16 12 21.7 23.2 21 28 30 23 ; run; data test1; set test; do i=1 to 13; fat=input(scan(fat_all,i, " "), 5.); if fat=. then delete; output; end; drop i fat_all; run; 其实, 5楼(chendonghui1987) CODE很简洁.

chendonghui1987 发表于5楼  查看完整内容

data AllSubjects; input sex $ @; /*13为所有行中最大的fat值的个数*/ do i=1 to 13; input fat @; output; end; datalines; m 13.3 19 20 8 18 22 20 31 21 12 16 12 24 f 22 26 16 12 21.7 23.2 21 28 30 23 run;

本帖被以下文库推荐

沙发
chendonghui1987 发表于 2012-5-3 22:43:15
data AllSubjects;
        input sex $ @;
       
/*13为所有行中最大的fat值的个数*/
        do i=1 to 13;
                input fat @;
                output;
        end;
datalines;
m 13.3 19 20 8 18 22 20 31 21 12 16 12 24
f 22 26 16 12 21.7 23.2 21 28 30 23
run;

藤椅
chendonghui1987 发表于 2012-5-3 23:02:26
这么短的数据,用excel编辑一下在其中可以用转置,或者input的时候编辑一下就行了

板凳
liuyingbei 在职认证  发表于 2012-5-4 09:27:52
  1. data data;
  2. infile data.txt;
  3. input sex$ fat;
  4. run;
复制代码
孜孜以求

报纸
chendonghui1987 发表于 2012-5-4 11:05:40
楼上写的代码好像不能读入吧

地板
Linda.Ling 发表于 2012-5-4 11:17:38
同意沙发楼的意见。由于你的txt文件里根本没有sex这个变量。最好在Excel里建一个出来,copy past很容易的。这个最容易。

或者你可以尝试sql。

7
liuyingbei 在职认证  发表于 2012-5-4 11:53:33
chendonghui1987 发表于 2012-5-4 11:05
楼上写的代码好像不能读入吧
why?
他的数据应该是两列吧?
如果是两列应该没有问题,而且数据长度最大的应该就是第一个。
孜孜以求

8
webgu 发表于 2012-5-4 11:59:17
可以试试这个。
  1. data dsin(keep=sex fat);
  2. infile "d:\06 tst\tt.txt";/*your txt file location*/
  3. input;
  4. retain sex;
  5. put _infile_;
  6. sexpart=scan(_infile_, 1, ":") ;
  7. fatpart=scan(_infile_, 2, ":") ;
  8. sex=substr(sexpart,1,2);
  9. i=1;
  10. do while  (scan(fatpart,i)^="");
  11.   fat=scan(fatpart,i);
  12.   output;
  13.   i+1;
  14. end;
  15. run;

  16. proc print;
  17. run;
复制代码
其实数据不大,没必要这折腾。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

9
chendonghui1987 发表于 2012-5-4 12:26:28
liuyingbei 发表于 2012-5-4 11:53
why?
他的数据应该是两列吧?
如果是两列应该没有问题,而且数据长度最大的应该就是第一个。
你的代码和他要的结果不一致,他要的结果是:


                                                           sex     fat
                                                            m     13.3
                                                            m     19.0
                                                            m     20.0
                                                            m      8.0
                                                            m     18.0
                                                            m     22.0
                                                            m     20.0
                                                            m     31.0
                                                            m     21.0
                                                            m     12.0
                                                            m     16.0
                                                            m     12.0
                                                            m     24.0
                                                            f     22.0
                                                            f     26.0
                                                            f     16.0
                                                            f     12.0
                                                            f     21.7
                                                            f     23.2
                                                            f     21.0
                                                            f     28.0
                                                            f     30.0
                                                            f     23.0

10
goldbaodi 发表于 2012-5-4 13:08:26
没事,凑个热闹:

data test;
input sex $ @1 fat_all $ 3-50;
datalines;
m 13.3 19 20 8 18 22 20 31 21 12 16 12 24
f 22 26 16 12 21.7 23.2 21 28 30 23
;
run;

data test1;
set test;
do i=1 to 13;
fat=input(scan(fat_all,i, " "), 5.);
if fat=. then delete;
output;
end;
drop i fat_all;
run;

其实, 5楼(chendonghui1987) CODE很简洁.

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 11:09