SAS中文论坛

标题: 初学者请教,关于data步的运行过程 [打印本页]

作者: shiyiming    时间: 2009-3-31 23:19
标题: 初学者请教,关于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[行号],那么有没有“独立”的变量,而非数组中的一项,以完成我想要的工作呢?
作者: shiyiming    时间: 2009-4-1 09:34
标题: Re: 初学者请教,关于data步的运行过程
b=a+_n_;
作者: shiyiming    时间: 2009-4-1 10:54
标题: Re: 初学者请教,关于data步的运行过程
十分感谢!学习到了_n_表示观测序号。
进一步的,还有两个问题,
第一个,假如我想要使b=a[本行]+a[第一行],比如第三行中,b=54+23=77,那么怎么表示a[第一行]这个变量呢?
第二个,假如我想要统计a>30的观测条数,想像其他语言一样,用一个i做计数器,
if a>30 then i=i+1;
但是在SAS中这么写的话i是一列,无法做计数器,那么有没有办法定义一个“独立”的变量i呢?
谢谢!
作者: Qiong    时间: 2009-4-1 15:56
标题: 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]
作者: shiyiming    时间: 2009-4-1 16:46
标题: Re: 初学者请教,关于data步的运行过程
受益匪浅!多谢指教 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2