{
  "category": "Statistical functions",
  "display_name": "SKEW",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.SKEW",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 1,
      "last_bit": 6,
      "matched": 4501,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 4508,
      "unread": 0,
      "worst_ulp": 170
    },
    "detail": "Of 4,514 recorded answers (4,508 in the answer bank and 6 workbook cells), 7 do not match: 1 differ by more than 16 ULP, 6 differ by at most 16 ULP.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "differs",
    "state_label": "Known larger differences",
    "summary": "Known larger differences on 7 of 4,514 recorded answers",
    "workbook_corpus": {
      "cells": 6,
      "matched": 6
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/statistics.rs#L391-L393",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/moment_stats_family.rs#L41-L71"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/statistics::all",
        "ported/moment_stats_family::mean"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/statistics.rs#L391-L393",
      "state": "differs",
      "suite": null,
      "summary": "Known larger differences on 7 of 4,514 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.SKEW.json",
  "name": "SKEW",
  "notes": [],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- **[SKEW.P](FUNC.SKEW.P.md)** is the population-convention sibling, `g1`, related by\n  `SKEW = SKEW.P * sqrt(n(n-1))/(n-2)`. It is not a legacy/modern pair and neither supersedes the\n  other: they are two different estimators of the same population quantity, and Excel names both.\n  Note the domain difference — `SKEW` requires `n >= 3` by construction, and the reference\n  engine's [SKEW.P](FUNC.SKEW.P.md) does not.\n- **[KURT](FUNC.KURT.md)** is the fourth-moment companion, with the same shape of bias correction\n  and the same family kernel. `KURT` requires `n >= 4` for the same structural reason `SKEW`\n  requires `n >= 3`.\n- **[STDEV.S](FUNC.STDEV.S.md)** supplies the `s` in the denominator; `SKEW` is undefined exactly\n  where `STDEV.S` is zero. **[AVERAGE](FUNC.AVERAGE.md)** supplies `xbar`.\n- **[STANDARDIZE](FUNC.STANDARDIZE.md)** performs the same `(x - mu)/sigma` map that `SKEW`\n  applies internally, one value at a time.\n- **[SKEW](FUNC.SKEW.md) has no Compatibility-category predecessor.** It is one of the older\n  statistical functions that was left undotted when the `.P`/`.S` reorganisation happened, so\n  `SKEW` is both the historical name and the current one, and `SKEW.P` is the newcomer. This is\n  the reverse of the usual pattern and is worth stating because migration guides that say \"prefer\n  the dotted name\" do not apply here.\n- Readers confuse `SKEW` with a normality test. It is not one: a skewness near zero is consistent\n  with many non-normal distributions, and the sampling distribution of `G1` under normality has\n  a standard error near `sqrt(6/n)`, which is large for the sample sizes spreadsheets usually\n  hold.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\n`SKEW` is a third moment, and third moments amplify every error the mean carries. The reference\nengine's kernel is worth reading closely because it makes two good choices and one that is merely\nconventional.\n\n**Two-pass centring, not raw power sums.** The kernel computes `xbar` first, then accumulates\n`sum (x_i - xbar)^2` and the standardised cubes in a second pass over stored deviations. The\nalternative — accumulating `sum x`, `sum x^2`, `sum x^3` and assembling the central moments\nalgebraically — is the form that appears in textbooks and in one-pass streaming code, and it is\nmuch worse. The third central moment obtained that way is\n\n    m3_raw  =  (1/n) sum x^3  -  3*xbar*(1/n) sum x^2  +  2*xbar^3\n\n**Per-element standardisation rather than a final scaling.** The kernel divides each deviation by\n`s` and then cubes, rather than cubing the deviations and dividing the sum by `s^3`. This costs\n`n` divisions instead of one, and buys range: `((x-xbar)/s)^3` stays near unit scale for typical\ndata, whereas `(x - xbar)^3` overflows for deviations beyond about `10^102` and underflows below\nabout `10^{-102}`. Data at those scales is rare but reachable, and the chosen form is the robust\none. It is the same argument that makes hypot-style scaling standard practice.\n\n**What remains.**\n\n- The mean and both accumulations are naive left-to-right sums, so their error grows with `n`\n  rather than being bounded by a constant. Compensated summation would fix this and is not used.\n- The `s = 0` guard is an exact comparison of the centred sum of squares against zero, not a\n  tolerance. Data with a real but vanishing spread divides by a denormal and produces an enormous\n  standardised cube rather than a diagnostic. There is no correct answer here, only a choice.\n- Cancellation still bites when the data has a large mean relative to its spread, because\n  `x_i - xbar` is a subtraction of nearby numbers even in the two-pass form. The two-pass form\n  reduces the damage from catastrophic to proportionate; it does not eliminate it. A classic\n  test case is the same values shifted by a large constant: the true skewness is invariant, so\n  any change in the answer is pure floating-point residue.\n- Summation order is part of the answer. Two correct implementations traversing the data\n  differently will disagree in the last bits, and nothing in the mathematics fixes those bits.\n\n**Where the identity helps.** `SKEW = SKEW.P * sqrt(n(n-1))/(n-2)` is exact in real arithmetic\nand is a strong cross-check: computing both and comparing the ratio against the closed form\nexercises the two kernels against each other with no external oracle. Because the reference\nengine computes them by parallel code paths with different denominators, agreement is\ninformative and disagreement localises immediately.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number`, dimensionless.\n\n- **Fewer than three numeric values.** `#DIV/0!` — the `(n-2)` factor in the denominator is\n  undefined at `n = 2` and the estimator has no meaning below that. This matches Microsoft's\n  documented condition.\n- **All values equal.** The centred sum of squares is zero, `s = 0`, and the standardisation is\n  `0/0`. `#DIV/0!`, documented.\n- **A symmetric sample.** `SKEW` is zero, and for data symmetric about its mean it is exactly\n  zero only when the positive and negative cubes cancel exactly — which for a two-sided\n  symmetric set in binary64 they generally do, since each `+d^3` has an exact `-d^3` partner. It\n  is worth knowing that this exactness is a property of the summation order and the data, not a\n  guarantee.\n- **Non-numeric cells in a scanned range** are skipped and do not enlarge `n`.\n- **Errors anywhere** propagate as themselves.\n- The result is not bounded by any fixed constant, but is bounded by `sqrt(n)` as above.\n\n\n\n### Errors\n\n\n| Error | Condition | Source |\n|---|---|---|\n| `#DIV/0!` | fewer than three data points | documented and implemented |\n| `#DIV/0!` | the sample standard deviation is zero | documented and implemented |\n| `#VALUE!` | direct text that does not parse as a number | shared coercion rule |\n| propagated | An error value in any argument surfaces as that error | shared coercion rule |\n\n\n",
    "sources": "- Microsoft, *SKEW function* —\n  <https://support.microsoft.com/en-us/office/skew-function-bdf49d86-b1ef-4804-a046-28eaea69c9fa>\n  (signature, the stated equation, the ignore-text-and-logicals rule for scanned ranges, and the\n  `#DIV/0!` conditions for fewer than three points and for zero standard deviation). Retrieval\n  was blocked by the upstream host for this page; the documented behaviour above is stated as\n  documented behaviour and should be re-checked against the page.\n- M. Abramowitz and I. A. Stegun, *Handbook of Mathematical Functions*, chapter 26 section 26.1 —\n  the moment and standardised-moment vocabulary used throughout this page.\n- D. N. Joanes and C. A. Gill, \"Comparing measures of sample skewness and kurtosis\", *Journal of\n  the Royal Statistical Society, Series D (The Statistician)* 47(1), 1998, pp. 183–189 — the\n  three competing sample estimators, their biases, and the exact relations between them.\n- T. F. Chan, G. H. Golub and R. J. LeVeque, \"Algorithms for Computing the Sample Variance:\n  Analysis and Recommendations\", *The American Statistician* 37(3), 1983, pp. 242–247 — the\n  two-pass versus raw-sums analysis, applied here to a higher moment.\n- Handbook [coercion and lifting](../model/02-coercion-and-lifting.md) — the direct-argument\n  versus range-scan dual policy this aggregate carries.\n- Handbook `data/functions/FUNC.SKEW.json`, `data/presence/FUNC.SKEW.json`.\n\n",
    "version-differences": "The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.\n\n| Excel 16.0 build | Platform and CPU | Captured inputs |\n|---|---|---:|\n| 20430 | Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics | 3,004 |\n\nThe record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.SKEW.json).",
    "what-it-does": "\n`SKEW(number1, [number2], …)` returns the **sample skewness** of the values it is given: a\ndimensionless measure of the asymmetry of their distribution about its mean, under the\nbias-corrected convention.\n\nFor values `x_1, …, x_n` with mean `xbar` and *sample* standard deviation\n\n    s  =  sqrt( sum (x_i - xbar)^2 / (n - 1) )\n\nthe returned quantity is\n\n    SKEW  =  G1  =  ( n / ((n-1)(n-2)) )  *  sum_{i=1..n} ( (x_i - xbar) / s )^3\n\nThis is the **adjusted Fisher–Pearson standardised moment coefficient**, conventionally written\n`G1`. It is the estimator obtained by correcting the raw third standardised moment so that it is\nunbiased for the population skewness when the underlying data is normal.\n\nIts meaning is the classical one from the moment vocabulary of Abramowitz & Stegun chapter 26:\nthe third standardised moment `E[((X - mu)/sigma)^3]` measures which tail is longer. `SKEW`\nreturns zero for any symmetric sample, positive when the right tail is longer (mass bunched at\nthe low end, a few large values), and negative for the mirror image. It is invariant under any\npositive affine change of units — shift the data, scale it by a positive factor, and `SKEW` does\nnot move — which is what makes it comparable across variables measured in different units.\n\n**Skewness has more than one sample definition, and Excel publishes two of them.** The\nuncorrected form, the plain third standardised moment about the sample mean using the\n*population* standard deviation, is\n\n    g1  =  m3 / m2^(3/2)  ,   where  m_k = (1/n) sum (x_i - xbar)^k\n\nand that is what [SKEW.P](FUNC.SKEW.P.md) returns. The two are related by an exact algebraic\nidentity:\n\n    G1  =  g1  *  sqrt( n (n-1) ) / (n - 2)\n\nso `SKEW` is always the larger in magnitude, and the inflation factor tends to `1` as `n` grows —\nit is above `1.1` only for small samples. Joanes and Gill (1998) catalogue this estimator and its\ncompetitors and give the relations among them; `G1` is the one used by SAS and SPSS, and `g1` is\nthe one used by many textbooks. Neither is wrong. A reader comparing Excel against another\npackage should establish which convention that package used before calling anything a\ndiscrepancy.\n\nThe estimator is **bounded**, a fact that is easy to miss and useful to know. For the uncorrected\nform the classical bound is `|g1| <= (n-2)/sqrt(n-1)`, attained when one observation sits apart\nfrom `n-1` identical ones. Substituting into the identity above gives\n\n    |SKEW|  <=  sqrt(n)\n\nSo a sample of five can never produce a skewness beyond about `2.24`, however extreme it looks.\nSmall-sample skewness estimates are not merely noisy; they are structurally incapable of\nreporting the asymmetry that a heavy-tailed population actually has. Any workflow that flags\n\"skewness above 2\" as a data-quality signal is measuring the sample size as much as the shape.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Required |\n|---|---|---|\n| `number1` | The first value, range or array. | yes |\n| `number2`, … | Further values, ranges or arrays. | optional, up to the declared maximum |\n\nThe arguments are a flat bag: everything is flattened and concatenated into one data set, and the\nargument boundaries have no effect on the answer.\n\n`SKEW` is an **aggregate**, not a lift kernel, and it carries the dual coercion policy described\nin [coercion and lifting](../model/02-coercion-and-lifting.md):\n\n- **Values reached by scanning a range or array** are used only if they are numbers. Text,\n  logical values and blank cells are skipped — they do not become zeros and they do not enlarge\n  `n`.\n- **Values passed directly as scalar arguments** go through ordinary to-number coercion, so\n  `SKEW(1,2,\"3\")` admits the text `\"3\"` as `3` where the same text in a scanned cell would be\n  ignored. Direct text that does not parse is `#VALUE!`.\n\nThat asymmetry is engine-wide policy, not something specific to `SKEW`, and it is the single most\ncommon source of \"the same data gives two answers\" reports across the whole statistical category.\n\n\n"
  },
  "signature": {
    "display": "SKEW(number1, [number2], ...)",
    "parameters": [
      {
        "description": null,
        "name": "number1",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "number2",
        "optional": true,
        "repeats": true
      }
    ],
    "trailing_repeats": true
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 255,
        "min": 1
      },
      "category": "Statistical functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "AggregateDirectAndRangeDualPolicy",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "NumsToNum",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Sample skewness: how lopsided the data are around their mean",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the skewness of a distribution",
        "microsoft_url": "https://support.microsoft.com/en-us/office/skew-function-bdf49d86-b1ef-4804-a046-28eaea69c9fa"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "SKEW"
        },
        {
          "locale": "bg-BG",
          "name": "SKEW"
        },
        {
          "locale": "cs-CZ",
          "name": "SKEW"
        },
        {
          "locale": "da-DK",
          "name": "SKÆVHED"
        },
        {
          "locale": "de-DE",
          "name": "SKEW"
        },
        {
          "locale": "el-GR",
          "name": "SKEW"
        },
        {
          "locale": "en-AU",
          "name": "SKEW"
        },
        {
          "locale": "en-GB",
          "name": "SKEW"
        },
        {
          "locale": "en-US",
          "name": "SKEW"
        },
        {
          "locale": "es-ES",
          "name": "COEFICIENTE.ASIMETRIA"
        },
        {
          "locale": "et-EE",
          "name": "SKEW"
        },
        {
          "locale": "fi-FI",
          "name": "JAKAUMAN.VINOUS"
        },
        {
          "locale": "fr-FR",
          "name": "COEFFICIENT.ASYMETRIE*"
        },
        {
          "locale": "he-IL",
          "name": "SKEW"
        },
        {
          "locale": "hr-HR",
          "name": "SKEW"
        },
        {
          "locale": "hu-HU",
          "name": "FERDESÉG"
        },
        {
          "locale": "id-ID",
          "name": "SKEW"
        },
        {
          "locale": "it-IT",
          "name": "SKEW"
        },
        {
          "locale": "ja-JP",
          "name": "SKEW"
        },
        {
          "locale": "ko-KR",
          "name": "SKEW"
        },
        {
          "locale": "lt-LT",
          "name": "SKEW"
        },
        {
          "locale": "lv-LV",
          "name": "SKEW"
        },
        {
          "locale": "nb-NO",
          "name": "SKJEVFORDELING"
        },
        {
          "locale": "nl-NL",
          "name": "SCHEEFHEID"
        },
        {
          "locale": "pl-PL",
          "name": "SKOŚNOŚĆ"
        },
        {
          "locale": "pt-BR",
          "name": "SKEW"
        },
        {
          "locale": "pt-PT",
          "name": "DISTORÇÃO"
        },
        {
          "locale": "ro-RO",
          "name": "SKEW"
        },
        {
          "locale": "ru-RU",
          "name": "СКОС"
        },
        {
          "locale": "sk-SK",
          "name": "SKEW"
        },
        {
          "locale": "sl-SI",
          "name": "SKEW"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "SKEW"
        },
        {
          "locale": "sv-SE",
          "name": "SNEDHET"
        },
        {
          "locale": "th-TH",
          "name": "SKEW"
        },
        {
          "locale": "tr-TR",
          "name": "ÇARPIKLIK"
        },
        {
          "locale": "uk-UA",
          "name": "SKEW"
        },
        {
          "locale": "vi-VN",
          "name": "SKEW"
        },
        {
          "locale": "zh-CN",
          "name": "SKEW"
        },
        {
          "locale": "zh-HK",
          "name": "SKEW"
        },
        {
          "locale": "zh-TW",
          "name": "SKEW"
        }
      ],
      "signature": {
        "display": "SKEW(number1, [number2], ...)",
        "parameters": [
          {
            "description": null,
            "name": "number1",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "number2",
            "optional": true,
            "repeats": true
          }
        ],
        "trailing_repeats": true
      },
      "surface_name": "SKEW",
      "version_marker": null,
      "xlcall": {
        "code": "323",
        "symbol": "xlfSkew"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/skew-function-bdf49d86-b1ef-4804-a046-28eaea69c9fa"
  },
  "try_it": {
    "formula": "=SKEW(1,2,\"3\")"
  },
  "url": "https://handbook.dnacalc.com/functions/SKEW.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "3,004 captured inputs are indexed for this environment. Capture dates: 2026-09-24 to 2026-09-25. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20430",
      "platform": "Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.SKEW.json"
      ]
    }
  ]
}