楼主: 505148701
993 4

[问答] SAS 程序疑问 [推广有奖]

  • 1关注
  • 0粉丝

大专生

73%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
311 点
帖子
27
精华
0
在线时间
72 小时
注册时间
2014-6-11
最后登录
2015-8-3

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
DATA A;   INPUT HR SBP DBP;
DATALINES;
   80 160 100
   70 150 90
   60 140 80
  ;
PROC MEANS DATA=A NOPRINT;
   VAR HR SBP DBP;
   OUTPUT OUT=B
         MEAN=M_HR M_SBP M_DBP;

RUN;

DATA C11;
    SET A;
    IF _N_=1 THEN SET B;
      HRPRE=HR/M_HR*100;
      SBPPRE=SBP/M_SBP*100;
      DBPPRE=DBP/M_DBP*100;
        DROP M_HR M_SBP M_DBP _TYPE_ _FREQ_;
DATALINES;
RUN;




请问这个程序中的if 语句是循环么?结果应该是怎么样的啊?


二维码

扫码加我 拉你入群

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

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

关键词:output Lines Input means outpu 程序

沙发
505148701 发表于 2014-6-11 17:14:50 |只看作者 |坛友微信交流群
   if语句不应该是循环吧?为什么结果运行出来觉得它循环了呢?

使用道具

藤椅
mingfeng07 学生认证  发表于 2014-6-11 18:45:40 |只看作者 |坛友微信交流群
这个需要理解data步数据的读取原理,当_n_=1时,数据读取B数据集,四个变量的第一行观测值被读取进C数据集,由于后面不再读取,因此在PDV中四个变量的值不更新,一直保持被自动读取同样的值,直到数据读取结束。

使用道具

板凳
505148701 发表于 2014-6-19 17:11:42 |只看作者 |坛友微信交流群
mingfeng07 发表于 2014-6-11 18:45
这个需要理解data步数据的读取原理,当_n_=1时,数据读取B数据集,四个变量的第一行观测值被读取进C数据集, ...
谢谢您

使用道具

报纸
Tigflanker 发表于 2014-6-19 21:16:59 |只看作者 |坛友微信交流群
  1. DATA C(keep = M_HR M_SBP M_DBP );
  2.   SET B;
  3.   do i = 1 to 5;
  4.     M_HR + i * 10;
  5.     M_SBP + i * 10;
  6.         M_DBP + i * 10;
  7.         output;
  8.   end;
  9. run;

  10. DATA C11;
  11.     SET A;
  12.     IF _N_ = 2 THEN SET C;
  13.       HRPRE=HR/M_HR*100;
  14.       SBPPRE=SBP/M_SBP*100;
  15.       DBPPRE=DBP/M_DBP*100;
  16. RUN;
复制代码
其实用if来控制set有点复杂,

例如上述程序,你可以看得到,C中有五条不同的观测,而最后一个data步中:第一个set是最外层完整的set,整个data步的条数仅由这个A数据集的条数决定,而第二个set的C数据集被if所控制,他只有_N_ = 2,一次机会读一条观测到PDV中,这也就相当于做了一个全部变量包括值的retain。

后面的DATALINES;用法无从考究。

Bye SAS.
若有缘,能重聚。

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 23:32