{
  "_id": "6aeb3249818c9e3ef6dc1662",
  "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",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Config/pak/sysreqs": "make libx11-dev zlib1g-dev",
  "Repository": "https://songyue-chen.r-universe.dev",
  "Date/Publication": "2026-11-04 04:26:00 UTC",
  "RemoteUrl": "https://github.com/songyue-chen/sas2r",
  "RemoteRef": "HEAD",
  "RemoteSha": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-11-04 13:20:09 UTC",
    "User": "root"
  },
  "Author": "Songyue Chen [aut, cre]",
  "Maintainer": "Songyue Chen <songyue.chen.dev@gmail.com>",
  "_user": "songyue-chen",
  "_type": "src",
  "_file": "sas2r_0.5.8.tar.gz",
  "_fileid": "https://r2.ropensci.org/8b0d156cb9e9eaf132d77c08a34e7d03df6af56e28d5ff08a5d9a63400ec4d4d",
  "_filesize": 989427,
  "_sha256": "8b0d156cb9e9eaf132d77c08a34e7d03df6af56e28d5ff08a5d9a63400ec4d4d",
  "_expires": "2027-02-12T13:25:26.000Z",
  "_created": "2026-11-04T13:20:09.000Z",
  "_published": "2026-11-04T13:25:28.997Z",
  "_upstream": "https://github.com/songyue-chen/sas2r",
  "_status": "success",
  "_maintainer": {
    "name": "Songyue Chen",
    "email": "songyue.chen.dev@gmail.com"
  },
  "_jobs": [
    {
      "job": 126599216776,
      "time": 259,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13325943194"
    },
    {
      "job": 126599216955,
      "time": 239,
      "config": "linux-release-x86_64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13326872173"
    },
    {
      "job": 126599216888,
      "time": 184,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "13325743418"
    },
    {
      "job": 126599217111,
      "time": 206,
      "config": "macos-release-arm64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13326827026"
    },
    {
      "job": 126597292079,
      "time": 221,
      "config": "source",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13327911111"
    },
    {
      "job": 126599216920,
      "time": 99,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "13326686814"
    },
    {
      "job": 126599217269,
      "time": 202,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13325997985"
    },
    {
      "job": 126599217137,
      "time": 251,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "13328016693"
    },
    {
      "job": 126599217085,
      "time": 227,
      "config": "windows-release-x86_64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13325368816"
    }
  ],
  "_buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376",
  "_commit": {
    "id": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
    "author": "Songyue Chen <chuckknow@gmail.com>",
    "committer": "Songyue Chen <chuckknow@gmail.com>",
    "message": "Fix post-release CI checks\n",
    "time": 1793766360
  },
  "_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": "songyue-chen",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-35",
      "n": 12
    },
    {
      "week": "2026-37",
      "n": 17
    },
    {
      "week": "2026-38",
      "n": 11
    },
    {
      "week": "2026-39",
      "n": 9
    },
    {
      "week": "2026-40",
      "n": 3
    },
    {
      "week": "2026-41",
      "n": 5
    },
    {
      "week": "2026-43",
      "n": 1
    },
    {
      "week": "2026-45",
      "n": 2
    }
  ],
  "_tags": [
    {
      "name": "release-tests-0.5.8-20261021",
      "date": "2026-10-21"
    }
  ],
  "_topics": [
    "adam",
    "agent",
    "agentic-ai",
    "agentic-workflow",
    "anthropic",
    "awsbedrock",
    "azure",
    "biotech",
    "cdisc",
    "deepseek",
    "fda",
    "gemini",
    "openai",
    "sas",
    "sdtm",
    "statistical-programming",
    "statistics",
    "vertex-ai"
  ],
  "_stars": 11,
  "_contributors": [
    {
      "user": "songyue-chen",
      "count": 229,
      "uuid": 127554338
    }
  ],
  "_userbio": {
    "uuid": 127554338,
    "type": "user",
    "name": "songyue-chen",
    "followers": 0
  },
  "_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"
  ],
  "_homeurl": "https://github.com/songyue-chen/sas2r",
  "_realowner": "songyue-chen",
  "_cranurl": true,
  "_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/songyue-chen/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-08-29 22:35:28",
      "modified": "2026-10-08 22:10:28",
      "commits": 19
    },
    {
      "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-09-07 16:46:40",
      "modified": "2026-10-22 16:47:13",
      "commits": 14
    }
  ],
  "_score": 6.090610707828406,
  "_indexed": true,
  "_nocasepkg": "sas2r",
  "_universes": [
    "songyue-chen"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.5.8",
      "date": "2026-11-04T13:22:41.000Z",
      "distro": "resolute",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/b5a59fed970d8f350042360a5c1d61d6f12d0436a266189ba95fda121e648c03",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.6.2",
      "os": "linux",
      "version": "0.5.8",
      "date": "2026-11-04T13:22:30.000Z",
      "distro": "resolute",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/01e113e955a8c81f4431d1f8aa14af1b2d5f647b14339bfe0753ef49127ae49c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.5.8",
      "date": "2026-11-04T13:22:16.000Z",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/dc3f4eb7443397fe26db74d5affcf8ce2cfb8cebeae4f7b848eb729197322ad6",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.6.2",
      "os": "mac",
      "version": "0.5.8",
      "date": "2026-11-04T13:22:15.000Z",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/c734fce3c2129ef7476d7d8f30573baf78f0c8c221568816824be2e7643f6bea",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.5.8",
      "date": "2026-11-04T13:22:22.000Z",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/bc80f1f696089c460c8c9318f74bb63dfa4341d8998a29847013b37ea165cf89",
      "status": "success",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.5.8",
      "date": "2026-11-04T13:21:34.000Z",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/dc1f93c3814f93743e0c7d12cb0bd8d4924ff70e480db5bc51c2d587d679a0bb",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.5.8",
      "date": "2026-11-04T13:21:33.000Z",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/45c0d91e36fee3f47ebbfa062cc2595b8ad64cec390b783a0b101264c2524bc3",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    },
    {
      "r": "4.6.2",
      "os": "win",
      "version": "0.5.8",
      "date": "2026-11-04T13:21:46.000Z",
      "commit": "775e0cf40d9bfeadedf1a4f1a5fc3fba93f86fb2",
      "fileid": "https://r2.ropensci.org/7179cf471973621c3d6df086506c565130e9d4e26e32ab5ee3eed717e8fbe8e0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/songyue-chen/actions/runs/41836645376"
    }
  ]
}