SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 674|回复: 4
打印 上一主题 下一主题

初学者请教,关于data步的运行过程

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-3-31 23:19:49 | 只看该作者

初学者请教,关于data步的运行过程

我了解到了,data步有一个隐藏的外循环,比如像我这样,data步会循环5次。

data try2;
        input a;
        b=a+1;
        cards;
23
43
54
34
23
;
run;
proc
        print;
run;

但是,如果我想要实现b=a+行号,比如第一行b=23+1=24,第二行b=43+2=45等等,那么在SAS中应该如何实现呢?
我目前的理解,对比其他语言,此数的变量a,b实际上总是数组中的一个变量:a[行号],b[行号],那么有没有“独立”的变量,而非数组中的一项,以完成我想要的工作呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-4-1 09:34:37 | 只看该作者

Re: 初学者请教,关于data步的运行过程

b=a+_n_;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-4-1 10:54:57 | 只看该作者

Re: 初学者请教,关于data步的运行过程

十分感谢!学习到了_n_表示观测序号。
进一步的,还有两个问题,
第一个,假如我想要使b=a[本行]+a[第一行],比如第三行中,b=54+23=77,那么怎么表示a[第一行]这个变量呢?
第二个,假如我想要统计a>30的观测条数,想像其他语言一样,用一个i做计数器,
if a>30 then i=i+1;
但是在SAS中这么写的话i是一列,无法做计数器,那么有没有办法定义一个“独立”的变量i呢?
谢谢!
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
地板
发表于 2009-4-1 15:56:02 | 只看该作者

Re: 初学者请教,关于data步的运行过程

retain+宏变量
[code:3cz6ymea]data try2;
input a;
retain temp count;
if _n_=1 then temp=a;
b=a+temp;
if a>30 then count+1;
call symput('count',count);
drop count temp;
cards;
23
43
54
34
23
;
run;
proc
print;
run;
%put &count;[/code:3cz6ymea]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-4-1 16:46:00 | 只看该作者

Re: 初学者请教,关于data步的运行过程

受益匪浅!多谢指教 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 14:03 , Processed in 0.078649 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表