0

我正在尝试进行简单的计算,但我是新手,SAS 对我来说并不直观。

假设我有这张桌子。

data money;
infile datalines delimiter=",";
input name $ return $ invested;
datalines;
Joe,10,100
Bob,7,50
Mary,80,1000
;

这创造了这个

/* name | return | invested */
/* _________________________ */
/* Joe  | 10     | 100 */
/* Bob  | 7      | 50 */
/* Mary | 80     | 50 */

对于刚转到 SAS 的工作,我想做三件事。

  1. 我需要确保列returninvested数字。当我运行上面的代码时,returncolumn 最终成为一个 CHAR 列,我不知道为什么。

  2. 现在我想创建一个新列并计算他们各自获得的总回报的份额。在这种情况下,总和return=97。这就是我想要的结果。

/* name     | return | invested | share_of_return */
/* ____________________________________________ */
/* Joe      |  10   | 100       | 10.30% */
/* Bob      |   7   | 50        | 7.22% */
/* Mary     | 80    | 50        | 82.47% */
  1. 接下来我想找到他们的投资回报率。这是(回报投资)/投资* 100。这是我正在寻找的结果
/* Find ROI */

/* name | return | invested | share_of_return | ROI */
/* ___________________________________________________ */
/* Joe  | 10     | 100      | 10.30%          | -90% */
/* Bob  | 7      | 50       | 7.22%           | -86% */
/* Mary | 80     | 50       | 82.47%          | 60% */

感谢您的解释和指导。这是一个工作项目,我们刚刚切换到 SAS

4

1 回答 1

1

1 & 3 很简单,2 稍微难一些。

  1. 删除 INPUT 语句中的 $。$ 表示字符。不过,在您的数据中,您可能需要使用输入函数对其进行转换。

修复例如:

input name $ return  invested;

使用输入功能修复实际数据。请注意,您不能将数据步骤中的类型转换为相同的名称,因此我在使用重命名数据集选项读取它时重命名它。

data money2;
set money (rename = return = return_char);
return = input(return_char, best.);
drop return_char;
run;
  1. 将总值添加到数据步骤,SQL 在这里最快:
proc sql;
create table money3 as
select *, sum(return) as return_total, return/calculated return_total as return_percentage f=percent12.1
from money2;
quit;

我在这里概述了两种不同的方法

  1. 在数据步骤中,添加您的计算。如果可以在第一步中完成,这可能是最有效的。由于数据步骤会自动循环,因此您编写的公式几乎如图所示。在这种情况下,我还应用了一种格式,因此它显示为百分比,但这要求您不要将其乘以 100。根据您接下来要执行的操作,最好将其保留为数字。
data money2;
set money (rename = return = return_char);
return = input(return_char, best.);
ROI = (return - investment)/investment;
format ROI percent12.1;
run;
drop return_char;
run;
于 2021-11-16T20:22:42.350 回答