如何遍历数据集中的观察值和值?

时间:2019-10-16 20:54:55

标签: sas

我需要遍历数据集(内置数据训练SAS表)并基于该数据进行一些计算。首先,我不知道如何遍历表的列范围内的值。其次,需要遍历每个观测值中的所有值,并计算前一个值和后一个值之间的差。这是表格的示例:

Auto   Price1  Price2  Price3 
Mazda  35.000  40.500  38.000
Audi   70.000  60.000  80.000
BMW    110.000 85.000  93.000

比方说,我的表在SAS中被命名为Price。我在下面尝试过,但是我知道那是完全错误的。我不知道如何开始:

data data.Prices;

set myDataset.Prices;
do price_prev = Price1;
    do price_next = Price2;

    end;
    end;

    result = price_next-price_prev;
 run;

所需的输出应如下:

Auto   Diff1   Diff2    Diff3 
Mazda  0       5.500    -2.500
Audi   0       -10.000  20.000
BMW    0       -25.000  8.000

我需要使用某种循环,但不知道如何。重要的是我不能使用宏或其他复杂的合成器。只是循环。

2 个答案:

答案 0 :(得分:1)

在DATA步骤中,数据集被称为变量

<mat-accordion> <mat-expansion-panel #someComponentExpansionPanel> <mat-expansion-panel-header> Panel Summary </mat-expansion-panel-header> <ng-template matExpansionPanelContent> <some-component [updateOnOpen]="updateOnOpen"></some-component> </ng-template> <mat-expansion-panel> .... more panels with the same component <mat-accordion> @Component({ selector: 'main-component', templateUrl: './main-component.html', style: '' }) export class mainComponent implements OnInit { @ViewChild(SomeComponent, {static: false}) someComponent: SomeComponent; @ViewChild('someComponentExpansionPanel', {static: false}) someComponentExpansionPanel: MatExpansionPanel; private _updateOnOpen = false; get updateOnOpen(): boolean { return this._updateOnOpen; } onButtonClick() { if ( this.someComponent ) { this.someComponent.update(); } else { this._updateOnOpen = true; this.someComponentExpansionPanel.open(); } } 语句用于将变量与可以使用索引引用语法 name [index] 的数组名称相关联。数组默认为基于1的数组(第一个元素位于ARRAY上。)

[1]

如果与数组名称关联的变量名称尚不存在,则该语句会导致将变量添加到程序数据向量(PDV)中。

ARRAY prices price1-price3;

一旦指定了数组,就可以遍历数组中的项数(ARRAY diffs diff1-diff3; 函数)

DIM

如果您有3个以上的价格(例如10),只需将3更改为10。

答案 1 :(得分:0)

好的,我将此代码应用于实际表。我快完成了,但是我的代码需要一些提示,它不能正常工作。我使用内置的SAS培训表:

data loops.loopTables;

    set sashelp.us_data;

ARRAY table_1 Density_1910-Density_2010;
ARRAY diff diff1-diff101;

diff[1]=0;

do index = 2 to DIM(table_1);
    diff[index] = table_1[index]-table_1[index-1];

end;

run;
  1. 我创建2个数组:一个用于列名,第二个用于我的输出(差异)。它总是那样工作吗?
  2. 我只需要遍历一部分表。列的(变量)名称为:Density_1910,Density_1920,Density_1930 ... Density_2010。我想将它们关联在数组中,但不知道该怎么做。

唯一的方法是列出它们中的每一个,但如果我有30列可供选择,则对我来说不起作用

ARRAY table_1 Density_1910 Density_1920 Density_1930 Density_1940 etc.......;

还有其他方法可以根据需要的列创建数组吗?

  1. 第二个数组:
ARRAY diff diff1-diff101;

对此,我需要知道第一个数组(table_1)的维数并以这个数字结束diff吗?假设第一个array(table_1)的尺寸为30,所以我需要输入:diff1-diff30?

相关问题