首页 > 解决方案 > 仅保存非空数据集

问题描述

我有一个大型数据集,我在其中使用语法进行数据验证。对于每个验证,如果我需要检查的数据有问题,则会创建一个变量并将其设置为 1。然后,对于每个验证,我都会创建一个数据子集,其中仅包含相关案例的相关变量。我仍然使用语法将这些数据文件保存在 excel 中,以便进行检查并更正数据(在数据库中)。

问题是,并非每次我运行检查时我的 50 多个验证都检测到任何有问题的数据,但是保存了 50 多个文件,因为我为每个验证保存了一个文件。只有当文件中有数据时,我才想保存文件。

当前保存文件的语法是:

DATASET ACTIVATE DataSet1.
DATASET COPY  error1.
DATASET ACTIVATE  error1.
FILTER OFF.
USE ALL.
SELECT IF (var_error1 = 1).
EXECUTE.

SAVE TRANSLATE OUTFILE='path + '_error1.xlsx'
  /TYPE=XLS
  /VERSION=12
  /MAP
  /REPLACE
  /FIELDNAMES
  /CELLS=VALUES
  /KEEP=var1 var2 var3 var4.

每次验证都重复此操作。如果没有任何情况违反“error1”的验证,我仍然会得到一个输出文件(它是空的)。

如果确实存在违反验证的情况,是否有任何方法可以更改语法以仅保存数据?

标签: validationsavespssis-empty

解决方案


以下语法将编写一个新语法,其中包含将文件保存到 excel 的命令 - 仅当文件中有实际案例时。您将每次运行新语法,但 Excel 将仅在相关情况下创建:

DATASET ACTIVATE DataSet1.
DATASET COPY  error1.
DATASET ACTIVATE  error1.
FILTER OFF.
USE ALL.
SELECT IF (var_error1 = 1).
EXECUTE.

do if $casenum=1.
  write outfile='path\tmp\run error1.sps' /"SAVE TRANSLATE OUTFILE='path\var_error1.xlsx'"
     /"  /TYPE=XLS  /VERSION=12  /MAP  /REPLACE  /FIELDNAMES  /CELLS=VALUES  /KEEP=var1 var2 var3 var4.".
end if.
exe.

insert file='path\tmp\run error1.sps'.

请根据您的需要编辑“路径”。
请注意,新语法在所有情况下都会写入,但是当文件中没有数据时,语法将为空,因此不会将空文件写入excel。


推荐阅读