我需要遍历数据集(内置数据训练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
我需要使用某种循环,但不知道如何。重要的是我不能使用宏或其他复杂的合成器。只是循环。
答案 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;
唯一的方法是列出它们中的每一个,但如果我有30列可供选择,则对我来说不起作用
ARRAY table_1 Density_1910 Density_1920 Density_1930 Density_1940 etc.......;
还有其他方法可以根据需要的列创建数组吗?
ARRAY diff diff1-diff101;
对此,我需要知道第一个数组(table_1)的维数并以这个数字结束diff吗?假设第一个array(table_1)的尺寸为30,所以我需要输入:diff1-diff30?