data three;
set newtwo2;
array nut(26) kcal protein fat avcarbo totalcarbo fibre ash chole va caro retin thin ribof niacin vc totalve ca p k na mg fe mn zn cu se;
do i=1 to 26;
nut(i)=(nut(i)/100)*v39*(keshibu/100);
end;
run;
求助一段sas程序是什么意思?
答案:2 悬赏:0 手机版
解决时间 2021-03-01 22:48
- 提问者网友:未信
- 2021-03-01 08:26
最佳答案
- 五星知识达人网友:痴妹与他
- 2021-03-01 09:52
arry是数组语句,现在有一个nut数组,数组有26项数据,数据内容依次为 kcal protein fat avcarbo totalcarbo fibre ash chole va caro retin thin ribof niacin vc totalve ca p k na mg fe mn zn cu se
现在从第一个数据kcal开始 nut(1)=(nut(1)/100)*v39*(keshibu/100)且知道nut(1)=kcal
所以nut(1)=(kcal/100)*v39*(keshibu/100) //这个表达式没看懂,可能你自己做一遍就知道了,我不太理解。。。
所有26项数据按 上述操作执行一遍,新生成的nut数组放到three表格里。
注:set newtwo2; 表示读取netwo2这张表。一般来说,这个时候three这张表会填充进netwo2里的内容。但是!!这里的表都没有逻辑库,表示无法理解,你确定这段代码能跑通?不会的再追问吧。
现在从第一个数据kcal开始 nut(1)=(nut(1)/100)*v39*(keshibu/100)且知道nut(1)=kcal
所以nut(1)=(kcal/100)*v39*(keshibu/100) //这个表达式没看懂,可能你自己做一遍就知道了,我不太理解。。。
所有26项数据按 上述操作执行一遍,新生成的nut数组放到three表格里。
注:set newtwo2; 表示读取netwo2这张表。一般来说,这个时候three这张表会填充进netwo2里的内容。但是!!这里的表都没有逻辑库,表示无法理解,你确定这段代码能跑通?不会的再追问吧。
全部回答
- 1楼网友:十鸦
- 2021-03-01 11:28
datatmp;
setsashelp.workers(firstobs=10obs=15);
ifelectric>260;
run;
procprint;run;
obsdateelectricmasonry
1oct77278.6288.7
2nov77276.2286.2
3dec77274.6276.7
4jan78262.1234.3
输出4条记录。
解法2:
datatmp;
setsashelp.workers(firstobs=10obs=15);
whereelectric>260;
run;
procprint;run;
obsdateelectricmasonry
1may78278.0295.5
2jun78289.5308.3
3jul78296.6306.9
4aug78305.1315.3
5sep78307.8310.6
6oct78308.2316.3
输出6条记录。
思考:上述两种解法为什么输出不一样?请注意if语句和where语句的区别。
区别:
1.if语句是面向pdv的,对当前pdv中的数据进行判断,满足条件时将其写入到外部数据集;where语句也是面向pdv的,它使用于从外部数据源读数据到pdv之前进行判断,当满足条件时才被写入到pdv。显然一个在写入pdv之前,一个在写入pdv之后,两者是有差异的。
2.当没有数据集选项firstobs=10obs=15时,if语句和where语句用法结果相同,但有这两个选项时效果就不同了。有这两个选项,if语句是从原数据集(或数据源)的观测记录进行计算个数,即从原数据集的第10号观测开始读入到pdv中,然后再判断是否满足if条件,若满足则输出到外部数据集,直到原数据集的第15号观测结束。而where语句是在读入到pdv之前就进行判断的,所以这里的firstobs的意思是从使得满足where条件的第10个观测开始,而不是原数据集的第10个观测开始。
综上可知,该题中应使用if语句。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯