由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - {请教} 一个SAS程序问题
相关主题
请教一个SAS Macro的问题唉,还得求教前辈
SAS macro question如何用SAS invert矩阵(没有IML)?
请教SAS IML调用DATA step数据的问题Weird SAS macro bugs, 包子重谢!
SAS问题请教求助关于sas macro 中的if- then语句
问一个SAS format的问题,看似简单怎么在EXCEL里把一个column的A/B分到两个column里?
SAS里面怎么设置vectorsas proc report的问题。
请教一个SAS 数据分配问题求助!请教我这个SAS code哪里错了啊?
请教 SAS macro function 的问题求问 sas _c_ 什么意思
相关话题的讨论汇总
话题: data话题: temp话题: run话题: sas话题: column
进入Statistics版参与讨论
1 (共1页)
a******n
发帖数: 11246
1
我现在有个表格,其中一列是数字表达式:
Column A
1+1
1+2
1+3
etc...
这些数字表达式都以string的方式存储。
现在想把这些表达式的值算出来,存到新的列里,像这样:
Column A Column B
1+1 2
1+2 3
1+3 4
etc.. etc...
请教怎么做?感觉应该不难但是折腾了半天也没好方法。
g**u
发帖数: 205
2
SAS/IML?
a******n
发帖数: 11246
3
朋友直接来段代码吧,我折腾了半天也没好办法。
我先把所有N个表达式写进N个macro variables,
然后把值算出来放在另外个表里,再把两个表合并起来。
像傻x似的,唉。

【在 g**u 的大作中提到】
: SAS/IML?
g**u
发帖数: 205
4
我也不会用,还在学,只是觉得可能IML能解决你的问题

【在 a******n 的大作中提到】
: 朋友直接来段代码吧,我折腾了半天也没好办法。
: 我先把所有N个表达式写进N个macro variables,
: 然后把值算出来放在另外个表里,再把两个表合并起来。
: 像傻x似的,唉。

A*****a
发帖数: 1091
5
笨方法,抛砖引玉:
data temp;
input equation $;
cards;
1+1
1+2
1+3
;
run;
%macro calcu;
%let n=1;
%DO %WHILE (&n <=3);
data _NULL_; set temp;
if _N_=&n then call symput('eq',Trim(equation)); run;
data temp;
set temp;
if _N_ =&n then results=&eq;
run;
%let n=%eval(&n+1);
%end;
%mend;
%calcu;

【在 a******n 的大作中提到】
: 朋友直接来段代码吧,我折腾了半天也没好办法。
: 我先把所有N个表达式写进N个macro variables,
: 然后把值算出来放在另外个表里,再把两个表合并起来。
: 像傻x似的,唉。

d******9
发帖数: 404
6
Macro is too complicated, open codes can do it.
data A;
input A $;
cards;
1+1
1+2
1+3
;
run;
data B;
set A;
C=strip(scan(A, 1, '+-/*'));
D=strip(scan(A, 2, '+-/*'));
Y=C + D;
run;
Obs A C D Y
1 1+1 1 1 2
2 1+2 1 2 3
3 1+3 1 3 4
A*****a
发帖数: 1091
7
万一运算符不全是加号呢?

【在 d******9 的大作中提到】
: Macro is too complicated, open codes can do it.
: data A;
: input A $;
: cards;
: 1+1
: 1+2
: 1+3
: ;
: run;
: data B;

s******r
发帖数: 1524
8
万一不止一个运算符呢?

【在 A*****a 的大作中提到】
: 万一运算符不全是加号呢?
A*****a
发帖数: 1091
9
用我的笨办法就没关系
坐等高人来解决

【在 s******r 的大作中提到】
: 万一不止一个运算符呢?
o****o
发帖数: 8077
10
output to a Text file with
result = &yourformula; output
then %inc "file" in the next data step;

【在 s******r 的大作中提到】
: 万一不止一个运算符呢?
相关主题
SAS里面怎么设置vector唉,还得求教前辈
请教一个SAS 数据分配问题如何用SAS invert矩阵(没有IML)?
请教 SAS macro function 的问题Weird SAS macro bugs, 包子重谢!
进入Statistics版参与讨论
p*******i
发帖数: 1181
11
%eval?
k*******a
发帖数: 772
12
data temp;
input equation $;
cards;
1+1
1+2
1+3
;
run;
proc sql noprint;
select "B="||equation||";"||"output;" into :eqn separated by " " from temp;
quit;
data temp1;
&eqn
run;
d********e
发帖数: 9
13
data A;
input A $;
cards;
1+1
1+2
1+3
;
run;
data B;
set A;
B = resolve(catt('%eval(',A,')'));
run;
d******9
发帖数: 404
14
Great method!
However, if the calculation contains non-integer, then %eval will fail to
work, we will get missing value for B.
Say,
1.6+ 1.8
1+ 2.3
and so on

【在 d********e 的大作中提到】
: data A;
: input A $;
: cards;
: 1+1
: 1+2
: 1+3
: ;
: run;
: data B;
: set A;

A*****a
发帖数: 1091
15
试了试,只有这个能算非integer 。 mark 下,学习了!

temp;

【在 k*******a 的大作中提到】
: data temp;
: input equation $;
: cards;
: 1+1
: 1+2
: 1+3
: ;
: run;
: proc sql noprint;
: select "B="||equation||";"||"output;" into :eqn separated by " " from temp;

A*****a
发帖数: 1091
16
试了下,发现如果非integer ,这个办法会显示有错,连missing value都不会给。
but,对于integer 而言,是最好的办法了吧。mark下,学到新东西啦

【在 d******9 的大作中提到】
: Great method!
: However, if the calculation contains non-integer, then %eval will fail to
: work, we will get missing value for B.
: Say,
: 1.6+ 1.8
: 1+ 2.3
: and so on

d********e
发帖数: 9
17
改成
data B;
set A;
B = resolve(catt('%SYSEVALF(',A,')'));
run;
应该能计算non-integer吧

【在 d******9 的大作中提到】
: Great method!
: However, if the calculation contains non-integer, then %eval will fail to
: work, we will get missing value for B.
: Say,
: 1.6+ 1.8
: 1+ 2.3
: and so on

d******9
发帖数: 404
18
Bingo! It works.
Good job!

【在 d********e 的大作中提到】
: 改成
: data B;
: set A;
: B = resolve(catt('%SYSEVALF(',A,')'));
: run;
: 应该能计算non-integer吧

d******9
发帖数: 404
19
This method has a small problem.
If the data set Temp has millions of obs., then in LOG, we will have
millions of lines for the converted open codes.
Any way, it is a small drawback. Good job!

temp;

【在 k*******a 的大作中提到】
: data temp;
: input equation $;
: cards;
: 1+1
: 1+2
: 1+3
: ;
: run;
: proc sql noprint;
: select "B="||equation||";"||"output;" into :eqn separated by " " from temp;

A*****a
发帖数: 1091
20
nice and clean.大牛您是怎么学习macro的?太厉害了

【在 d********e 的大作中提到】
: 改成
: data B;
: set A;
: B = resolve(catt('%SYSEVALF(',A,')'));
: run;
: 应该能计算non-integer吧

相关主题
求助关于sas macro 中的if- then语句求助!请教我这个SAS code哪里错了啊?
怎么在EXCEL里把一个column的A/B分到两个column里?求问 sas _c_ 什么意思
sas proc report的问题。SAS里怎么根据VALUE来选择需要OUTPUT的COLUMNS
进入Statistics版参与讨论
d********e
发帖数: 9
21
真心没有系统的学过。我也是刚起步。
就是有时间就折腾自己的程序,看有没有简单快捷的方法。还有就是跟着SAS 论坛上混
,看别人有啥好技巧。

【在 A*****a 的大作中提到】
: nice and clean.大牛您是怎么学习macro的?太厉害了
a******n
发帖数: 11246
22
多谢楼上各位朋友的回复!
好多写法都是我不熟悉的,学到了很多。让我一个个输入SAS试试看哈~~
A*****a
发帖数: 1091
23
看来我还没起步。。。您有啥好论坛给推荐推荐不?这里人太少了。。。

【在 d********e 的大作中提到】
: 真心没有系统的学过。我也是刚起步。
: 就是有时间就折腾自己的程序,看有没有简单快捷的方法。还有就是跟着SAS 论坛上混
: ,看别人有啥好技巧。

d********e
发帖数: 9
24
SASCommunity,人大经济论坛SAS版之类的

【在 A*****a 的大作中提到】
: 看来我还没起步。。。您有啥好论坛给推荐推荐不?这里人太少了。。。
A*****a
发帖数: 1091
25
thanks a log.好奇一下啊,人大的统计很厉害么?还是你是人大的?

【在 d********e 的大作中提到】
: SASCommunity,人大经济论坛SAS版之类的
d********e
发帖数: 9
26
不是人大的。也是找了很多SAS论坛,觉得这个论坛比较活跃

【在 A*****a 的大作中提到】
: thanks a log.好奇一下啊,人大的统计很厉害么?还是你是人大的?
1 (共1页)
进入Statistics版参与讨论
相关主题
求问 sas _c_ 什么意思问一个SAS format的问题,看似简单
SAS里怎么根据VALUE来选择需要OUTPUT的COLUMNSSAS里面怎么设置vector
Re: 请问SAS如何学起?请教一个SAS 数据分配问题
[合集] 发伪币3000 - 不用SAS\IML如何用SAS做矩阵计算?请教 SAS macro function 的问题
请教一个SAS Macro的问题唉,还得求教前辈
SAS macro question如何用SAS invert矩阵(没有IML)?
请教SAS IML调用DATA step数据的问题Weird SAS macro bugs, 包子重谢!
SAS问题请教求助关于sas macro 中的if- then语句
相关话题的讨论汇总
话题: data话题: temp话题: run话题: sas话题: column