{
  "_id": "6aea74c71e2c7b3a4f533e34",
  "Package": "sas2r",
  "Title": "Translate 'SAS' Programs to R with Dependency-Aware Migration",
  "Version": "0.5.8",
  "Authors@R": "person(\"Songyue\", \"Chen\", email = \"songyue.chen.dev@gmail.com\", role = c(\"aut\", \"cre\"))",
  "Description": "Translates 'SAS' programs and projects into R code, orders\nconnected programs by their dependencies, and executes\ngenerated code. Compares generated datasets with supplied\nreference outputs and reports unresolved translation and\nvalidation findings. Rule-based translation works offline\nwithout a 'SAS' installation. Optional language model\ntranslation, review, and repair use a user-configured provider\nthrough 'ellmer' and may require an account and API\ncredentials.",
  "License": "Apache License (>= 2)",
  "URL": "https://github.com/songyue-chen/sas2r",
  "BugReports": "https://github.com/songyue-chen/sas2r/issues",
  "Encoding": "UTF-8",
  "RoxygenNote": "7.3.3",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-11-03 23:51:46 UTC",
    "User": "root"
  },
  "Author": "Songyue Chen [aut, cre]",
  "Maintainer": "Songyue Chen <songyue.chen.dev@gmail.com>",
  "Repository": "https://cran.r-universe.dev",
  "Date/Publication": "2026-11-03 21:17:36 UTC",
  "RemoteUrl": "https://github.com/cran/sas2r",
  "RemoteRef": "HEAD",
  "RemoteSha": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
  "_user": "cran",
  "_type": "src",
  "_file": "sas2r_0.5.8.tar.gz",
  "_fileid": "https://r2.ropensci.org/e83529bd006ae5b39cb030b463fc488dee2c096e06a1e7187f9f661a6e017e92",
  "_filesize": 989591,
  "_sha256": "e83529bd006ae5b39cb030b463fc488dee2c096e06a1e7187f9f661a6e017e92",
  "_expires": "2027-02-11T23:56:54.000Z",
  "_created": "2026-11-03T23:51:46.000Z",
  "_published": "2026-11-03T23:56:55.912Z",
  "_upstream": "https://github.com/cran/sas2r",
  "_status": "success",
  "_maintainer": {
    "name": "Songyue Chen",
    "email": "songyue.chen.dev@gmail.com"
  },
  "_jobs": [
    {
      "job": 126287340187,
      "time": 246,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13281952580"
    },
    {
      "job": 126287340174,
      "time": 241,
      "config": "linux-release-x86_64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13281607829"
    },
    {
      "job": 126285492006,
      "time": 256,
      "config": "source",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13282855916"
    },
    {
      "job": 126287340296,
      "time": 110,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "13282276262"
    },
    {
      "job": 126287340425,
      "time": 249,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13282517256"
    },
    {
      "job": 126287340184,
      "time": 152,
      "config": "windows-release-x86_64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13282526213"
    }
  ],
  "_buildurl": "https://github.com/r-universe/cran/actions/runs/41741934795",
  "_commit": {
    "id": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
    "author": "Songyue Chen <songyue.chen.dev@gmail.com>",
    "committer": "cran-robot <csardi.gabor+cran@gmail.com>",
    "message": "version 0.5.8\n",
    "time": 1793740656
  },
  "_distro": "resolute",
  "_host": "GitHub-Actions",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1",
      "role": "Depends"
    },
    {
      "package": "callr",
      "role": "Imports"
    },
    {
      "package": "cli",
      "version": ">= 3.4",
      "role": "Imports"
    },
    {
      "package": "clue",
      "role": "Imports"
    },
    {
      "package": "filelock",
      "role": "Imports"
    },
    {
      "package": "haven",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "stats",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "vctrs",
      "role": "Imports"
    },
    {
      "package": "yaml",
      "role": "Imports"
    },
    {
      "package": "diffdf",
      "role": "Suggests"
    },
    {
      "package": "dplyr",
      "version": ">= 1.1.0",
      "role": "Suggests"
    },
    {
      "package": "ellmer",
      "version": ">= 0.4.2",
      "role": "Suggests"
    },
    {
      "package": "ggplot2",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "pdftools",
      "role": "Suggests"
    },
    {
      "package": "pkgload",
      "role": "Suggests"
    },
    {
      "package": "ps",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "S7",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.1.7",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "cran",
  "_selfowned": false,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-45",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "0.5.8",
      "date": "2026-11-03"
    }
  ],
  "_stars": 0,
  "_userbio": {
    "uuid": 6899542,
    "type": "organization",
    "name": "cran",
    "followers": 635,
    "description": "Unofficial read-only mirror of all CRAN R packages"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/sas2r"
  },
  "_devurl": "https://github.com/songyue-chen/sas2r",
  "_searchresults": 14,
  "_rbuild": "4.6.2",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/sas2r.html"
  ],
  "_cranurl": false,
  "_releases": [
    {
      "version": "0.5.8",
      "date": "2026-11-03"
    }
  ],
  "_exports": [
    "analyze_output_order",
    "apply_format",
    "as_digest_json",
    "chr_cmp",
    "compare_aligned_outputs",
    "compare_datasets",
    "compare_profile",
    "diff_digest",
    "lib_delete",
    "lib_exists",
    "lib_members",
    "lib_read",
    "lib_write",
    "passed",
    "qc_profile",
    "read_comparison_report",
    "sas_code",
    "sas_compress",
    "sas_config",
    "sas_display",
    "sas_if_else",
    "sas_length",
    "sas_llm",
    "sas_llm_models",
    "sas_llm_probe",
    "sas_max",
    "sas_mean",
    "sas_merge",
    "sas_min",
    "sas_missing",
    "sas_preflight",
    "sas_put",
    "sas_round",
    "sas_sort",
    "sas_substr",
    "sas_sum",
    "sas_translate",
    "sas_true",
    "sas_write",
    "sas2r_fold_names",
    "sas2r_libname_assign",
    "sas2r_libname_clear",
    "sas2r_resolve_registry",
    "sas2r_source_include",
    "write_comparison_report"
  ],
  "_help": [
    {
      "page": "analyze_output_order",
      "title": "Analyze dataset row order independently of content equivalence",
      "topics": [
        "analyze_output_order"
      ]
    },
    {
      "page": "apply_format",
      "title": "Apply a SAS format",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "apply_format",
        "sas_put"
      ]
    },
    {
      "page": "as_digest_json",
      "title": "Serialize a diff digest to JSON",
      "topics": [
        "as_digest_json"
      ]
    },
    {
      "page": "chr_cmp",
      "title": "Compare values the way SAS does",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "chr_cmp"
      ]
    },
    {
      "page": "compare_aligned_outputs",
      "title": "Compare aligned outputs under SAS-aware tolerance rules",
      "topics": [
        "compare_aligned_outputs"
      ]
    },
    {
      "page": "compare_datasets",
      "title": "Compare two datasets under SAS-aware tolerance rules",
      "topics": [
        "compare_datasets"
      ]
    },
    {
      "page": "compare_profile",
      "title": "Build a comparison tolerance profile",
      "topics": [
        "compare_profile"
      ]
    },
    {
      "page": "diff_digest",
      "title": "Build the redacted diff digest (the only comparison artifact that may cross to an LLM). Names, counts, magnitudes, and enumerated hints only - never cell values, never key values.",
      "topics": [
        "diff_digest"
      ]
    },
    {
      "page": "lib_delete",
      "title": "Delete explicitly named datasets from a writable library",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "lib_delete"
      ]
    },
    {
      "page": "lib_exists",
      "title": "Test whether a library dataset member exists",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "lib_exists"
      ]
    },
    {
      "page": "lib_members",
      "title": "List ordinary dataset members in a configured library",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "lib_members"
      ]
    },
    {
      "page": "lib_read",
      "title": "Read and write datasets through librefs",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "lib_read",
        "lib_write"
      ]
    },
    {
      "page": "passed",
      "title": "Did a comparison pass within tolerance?",
      "topics": [
        "passed"
      ]
    },
    {
      "page": "print.sas2r_translation",
      "title": "Print a sas2r translation summary",
      "topics": [
        "print.sas2r_translation"
      ]
    },
    {
      "page": "print.sas2r_transpilation",
      "title": "Print a sas2r transpilation summary",
      "topics": [
        "print.sas2r_transpilation"
      ]
    },
    {
      "page": "qc_profile",
      "title": "Define reusable dataset quality requirements",
      "topics": [
        "qc_profile"
      ]
    },
    {
      "page": "read_comparison_report",
      "title": "Read a bounded comparison report from the registry",
      "topics": [
        "read_comparison_report"
      ]
    },
    {
      "page": "sas_code",
      "title": "Retrieve staged code for a translated program from the selected bundle",
      "topics": [
        "sas_code"
      ]
    },
    {
      "page": "sas_compress",
      "title": "SAS character functions",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_compress",
        "sas_length",
        "sas_substr"
      ]
    },
    {
      "page": "sas_config",
      "title": "Load project configuration (optional by design)",
      "topics": [
        "sas_config"
      ]
    },
    {
      "page": "sas_display",
      "title": "Display values the way SAS prints them",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_display"
      ]
    },
    {
      "page": "sas_if_else",
      "title": "IF/THEN/ELSE assignment with SAS semantics",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_if_else"
      ]
    },
    {
      "page": "sas_llm",
      "title": "Construct an LLM adapter from a project's llm: configuration",
      "topics": [
        "sas_llm"
      ]
    },
    {
      "page": "sas_llm_models",
      "title": "List models visible to the configured provider identity",
      "topics": [
        "sas_llm_models"
      ]
    },
    {
      "page": "sas_llm_probe",
      "title": "Probe LLM connectivity and configured settings with a structured ping",
      "topics": [
        "sas_llm_probe"
      ]
    },
    {
      "page": "sas_merge",
      "title": "Merge two datasets the way MERGE ... BY does",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_merge"
      ]
    },
    {
      "page": "sas_min",
      "title": "Row-wise MIN and MAX with SAS missing semantics",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_max",
        "sas_min"
      ]
    },
    {
      "page": "sas_missing",
      "title": "SAS missing values and Boolean conditions",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_missing",
        "sas_true"
      ]
    },
    {
      "page": "sas_preflight",
      "title": "Inspect a migration and optionally diagnose findings",
      "topics": [
        "sas_preflight"
      ]
    },
    {
      "page": "sas_round",
      "title": "Round the way SAS does",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_round"
      ]
    },
    {
      "page": "sas_sort",
      "title": "Sort a dataset the way PROC SORT does",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_sort"
      ]
    },
    {
      "page": "sas_sum",
      "title": "Row-wise SUM and MEAN with SAS missing semantics",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas_mean",
        "sas_sum"
      ]
    },
    {
      "page": "sas_translate",
      "title": "Translate SAS programs or project to R with dependency-aware orchestration",
      "topics": [
        "sas_translate"
      ]
    },
    {
      "page": "sas_write",
      "title": "Write translated code artifacts and outputs to a destination directory",
      "topics": [
        "sas_write"
      ]
    },
    {
      "page": "sas2r_fold_names",
      "title": "Fold column names to lower case",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas2r_fold_names"
      ]
    },
    {
      "page": "sas2r_libname_assign",
      "title": "Bind or clear a libref at its point of use",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas2r_libname_assign",
        "sas2r_libname_clear"
      ]
    },
    {
      "page": "sas2r_resolve_registry",
      "title": "Resolve a bundle's libref registry against its folder",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas2r_resolve_registry"
      ]
    },
    {
      "page": "sas2r_runtime",
      "title": "The runtime every translated program carries",
      "topics": [
        "$<-.sas2r_dataset",
        "sas2r_helpers",
        "sas2r_runtime",
        "[[<-.sas2r_dataset"
      ]
    },
    {
      "page": "sas2r_source_include",
      "title": "Run an included module where the %INCLUDE stood",
      "concept": [
        "runtime helpers"
      ],
      "topics": [
        "sas2r_source_include"
      ]
    },
    {
      "page": "write_comparison_report",
      "title": "Write a PROC-COMPARE-style markdown report or versioned JSON comparison report",
      "topics": [
        "write_comparison_report"
      ]
    }
  ],
  "_readme": "https://github.com/cran/sas2r/raw/HEAD/README.md",
  "_rundeps": [
    "bit",
    "bit64",
    "callr",
    "cli",
    "clipr",
    "clue",
    "cluster",
    "cpp11",
    "crayon",
    "filelock",
    "forcats",
    "glue",
    "haven",
    "hms",
    "jsonlite",
    "lifecycle",
    "magrittr",
    "otel",
    "pillar",
    "pkgconfig",
    "prettyunits",
    "processx",
    "progress",
    "ps",
    "R6",
    "readr",
    "rlang",
    "tibble",
    "tidyselect",
    "tzdb",
    "utf8",
    "vctrs",
    "vroom",
    "withr",
    "yaml"
  ],
  "_vignettes": [
    {
      "source": "dependency-aware-migration.Rmd",
      "filename": "dependency-aware-migration.html",
      "title": "Dependency-Aware SAS-to-R Migration",
      "author": "Songyue Chen",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Migration Pipeline Architecture",
        "Configuring a Clinical Study Migration (_sas2r.yml)",
        "Inspect the setup offline",
        "Declare a shared-session program order",
        "Running a Migration in R",
        "Four Canonical Bundle Statuses",
        "Review completion and reference comparability",
        "Component Evidence Ladder",
        "Attempt Isolation & Copy-on-Write",
        "Model Privacy & Clinical Data Protection",
        "Parity Disclaimer"
      ],
      "created": "2026-11-03 21:17:36",
      "modified": "2026-11-03 21:17:36",
      "commits": 1
    },
    {
      "source": "runtime-helpers.Rmd",
      "filename": "runtime-helpers.html",
      "title": "The Runtime Inside Every Translated Program",
      "author": "Songyue Chen",
      "engine": "knitr::rmarkdown",
      "headings": [
        "What a bundle contains",
        "Running a program",
        "Maintaining autoexec.R",
        "Using the runtime interactively",
        "The reference",
        "Versioning and stability",
        "Where this is going"
      ],
      "created": "2026-11-03 21:17:36",
      "modified": "2026-11-03 21:17:36",
      "commits": 1
    }
  ],
  "_score": 3.146128035678238,
  "_indexed": true,
  "_nocasepkg": "sas2r",
  "_universes": [
    "cran",
    "songyue-chen"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.5.8",
      "date": "2026-11-03T23:54:12.000Z",
      "distro": "resolute",
      "commit": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
      "fileid": "https://r2.ropensci.org/0b2c7475d6e74ef8f9f796a8b828630728d9353f1d4e9b9ad10d5a39a37f2968",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41741934795"
    },
    {
      "r": "4.6.2",
      "os": "linux",
      "version": "0.5.8",
      "date": "2026-11-03T23:54:15.000Z",
      "distro": "resolute",
      "commit": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
      "fileid": "https://r2.ropensci.org/b7389ef3d64cb5d73e220e26360a220629856ea2e0282df0ea4bb8acdf7da2bb",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41741934795"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.5.8",
      "date": "2026-11-03T23:54:15.000Z",
      "commit": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
      "fileid": "https://r2.ropensci.org/e7b42b768dde7821d57f11f7e599c2b0c5fcae977d747720775af5a48518ad51",
      "status": "success",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41741934795"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.5.8",
      "date": "2026-11-03T23:53:21.000Z",
      "commit": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
      "fileid": "https://r2.ropensci.org/84efaf6464f75b82a5ddb49843732dd222bbb2e04f9e2fd2e45b325e9f026b10",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41741934795"
    },
    {
      "r": "4.6.2",
      "os": "win",
      "version": "0.5.8",
      "date": "2026-11-03T23:53:18.000Z",
      "commit": "f12505b2f3e0f59a1dd02ac0732ff6d2030f89c0",
      "fileid": "https://r2.ropensci.org/369ef7523c2fdcfbb2abb7e0eb061f7634988910b91e1ff2c18df61b35516fe2",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41741934795"
    }
  ]
}